设为首页 加入收藏

TOP

Linux下面的C开发---Socket编程
2014-11-24 03:24:51 来源: 作者: 【 】 浏览:0
Tags:Linux 面的 开发 ---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只能用在对等模型中,所以这就是一个最大的弊病。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux下面的C开发---UDP编程 下一篇Android 内存分配小结

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)
·Linux常用命令60条( (2025-12-25 00:50:40)
·nginx 监听一个端口 (2025-12-25 00:19:30)
·整个互联网就没有一 (2025-12-25 00:19:27)