Linux下面的C开发---Socket编程
Linux下面的C开发---Socket编程
来说Linux的网络编程。
首先说几个常用的网络工具
Ping 很著名的工具了,测试网络是否正常全靠这个小玩意了。捎带说一句,ping的底层是ICMP协议。并非TCP/IP协议。
netstat 查看当前系统中开启的所有服务状态,我们写完的网络程序运行的时候,可以用这个工具在终端里面看一下状态。
ifconfig 查看系统的网络配置信息,比如IP地址,子网掩码,网关,主机名等等。
然后我们再说说网络的基本概念
在计算机网络中有一个很重要的概念就是主机地址,数据的传输完全依靠主机地址来路由。像经常写的192.168.0.34只是一个IP地址,这个地址是容易被人类所识别的。但不是计算机所采用的编码方式。计算机采用的是一个网络字节方式,现在我们开看看IP地址的转换。
inet_addr //把字符串转换为整数(网络字节序)
inet_aton //把字符串转换为struct in_addr;(网络字结序)
#inet_network//把字符串转换为整数(本地字节序)
inet_ntoa //把结构体转换为字符串
htons 将一个无符号短整型数值转换为网络字节序
htonl 将一个无符号长整型数值转换为网络字节序
ntohs 将网络字节序转换成短整数
ntohl 将网络字节序转换成长整数
现在上代码吧 。先看UDP编程模型。
int main(){
int fd;
struct sockaddr_in ad;
struct sockaddr_in ad_snd;
int len;
int r;
fd=socket(AF_INET,SOCK_DGRAM,17);
if(fd==-1){
printf("Init Sock Faile!\n");
exit(0);
}
printf("Socket Success\n");
ad.sin_family=AF_INET;
ad.sin_port=htons(9999);
ad.sin_addr.s_addr=inet_addr("192.168.0.34");
r=bind(fd,(struct sockaddr*)&ad,sizeof(ad));
if(r==-1){
printf("Bind Faile\n");
exit(0);
}
char buf[100];
while(1){
len=sizeof(ad_snd);
recvfrom(fd,&buf,sizeof(buf),0,(struct sockaddr*)&ad_snd,&len);
//这里应该判断读取的状态,如果正常则输出数据
//一下的输出略去....
}
}
上面的代码就是一个UDP编程,它接受到数据后将发送方的IP地址存放到一个sockaddr_in 结构体中,然后就可以输出这个结构体的信息。也就可以知道是谁发来的数据了。因为UDP只能用在对等模型中,所以这就是一个最大的弊病。
好了,真困。 顺便说句,YLMF的OS跟Ubuntu真的太像了,简直就是一个模子出来的。中国的山寨太强大了!
不过使用这个LINUX作开发也挺舒服,至少工具都全了。不用再东奔西跑找包了。
评论暂时关闭