Linux下socket编程之UDP
来源:互联网 发布:海康威视有线连接网络 编辑:程序博客网 时间:2024/06/06 10:58
代码如下:
udp_client.c
#include<stdio.h>#include<netinet/in.h>#include<stdlib.h>#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include<arpa/inet.h>static void usage(char* proc){ printf("usage:%s[serverip][serverport]",proc);}int main(int argc,char* argv[]){ if(argc!=3) { usage(argv[0]); return 1; } int sock=socket(AF_INET,SOCK_DGRAM,0);//要注意这里和TCP不同 struct sockaddr_in server_addr; server_addr.sin_family=AF_INET; server_addr.sin_port=htons(atoi(argv[2])); server_addr.sin_addr.s_addr=inet_addr(argv[1]); char buff[1024]; while(1) { printf("client:#"); fflush(stdout); ssize_t n=read(0,buff,sizeof(buff)-1); if(n>0) { buff[n]='\0'; sendto(sock,buff,strlen(buff),0,(struct sockaddr*)&server_addr,sizeof(server_addr)); ssize_t s=recvfrom(sock,buff,sizeof(buff)-1,0,NULL,NULL); if(s>0) printf("server echo:%s",buff); } } close(sock); return 0;}
udp_server.c
#include<stdio.h>#include<netinet/in.h>#include<stdlib.h>#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include<arpa/inet.h>static void usage(char*proc){ printf("usage:%s,[ip][port]",proc);}int main(int argc,char* argv[]){ if(argc!=3) { usage(argv[0]); return 1; } int sock=socket(AF_INET,SOCK_DGRAM,0); if(sock<0) { perror("socket"); return 2; } struct sockaddr_in server_addr; server_addr.sin_family=AF_INET; server_addr.sin_port=htons(atoi(argv[2])); server_addr.sin_addr.s_addr=inet_addr(argv[1]); if(bind(sock,(struct sockaddr*)&server_addr,sizeof(server_addr))<0) { perror("bind"); return 3; } char buff[1024]; struct sockaddr_in client_addr; socklen_t len=sizeof(server_addr); while(1) { ssize_t recv=recvfrom(sock,buff,sizeof(buff)-1,0,(struct sockaddr*)&client_addr,&len); if(recv>0) { buff[recv]='\0'; printf("client ip:%s,port:%d say:%s",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port),buff); sendto(sock,buff,strlen(buff),0,(struct sockaddr*)&client_addr,len); } } close(sock); return 0;}
udp和tcp的区别不是很大,如果理解了tcp那么udp也就很容易理解了,关键是要用好sendto和recvfrom两个函数,其他的应该是问题不大。
下面我把这两个函数拿出来大家看一下:
下面是测试udp服务器和客户端:
大致也就这么多了,如果有错误、疑惑请评论
阅读全文
0 0
- Linux下Socket编程之UDP原理
- Linux下Socket编程之UDP应用
- Linux下Socket编程之UDP应用
- Linux下socket编程之UDP
- linux下socket编程(udp)
- Linux 编程之 【socket】 udp
- Linux之UDP SOCKET 编程
- Linux下socket编程之UDP简单实现
- 【Linux】Linux C socket 编程之UDP
- linux下UDP的socket编程
- linux socket编程之TCP与UDP
- linux socket编程之TCP与UDP
- Linux C socket编程之UDP
- linux socket编程之TCP与UDP .
- linux socket编程之TCP与UDP
- linux socket编程之TCP与UDP
- linux网络编程之socket(UDP)
- linux socket编程之TCP与UDP
- 链表检测是否有环
- Online Algorithms for calculating variance
- mybatis中使用in查询时的注意事项
- Java I/O 知识点(一)
- [一天几个linux命令] 运行流程
- Linux下socket编程之UDP
- hadoop fs -ls results in “no such file or directory”
- UE4引擎查看资源相互引用的情况
- 第二篇 Linux基础知识
- 65 C语言字符数组和字符串
- 69个经典的Spring面试题和答案
- 2017.5.29-6.3 城市规划 思考记录(非常不容易)
- java中String类型变量的赋值问题
- 第三篇 磁盘分区的问题