网络编程——UDP编程
Posted it8343
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程——UDP编程相关的知识,希望对你有一定的参考价值。
一个简单的聊天代码:运行结果:
在这个程序之中,由于recvfrom函数拥塞函数,没有数据时会一直阻塞,所以客户端和服务器端只能通过一回一答的方式进行信息传递。严格的讲UDP没有明确的客户端和服务端,谁先进行数据传输,谁就是客户端,客户端也有可能是服务器端。
代码1:
1 #include"common.h" 2 3 int main() 4 { 5 int fd;int saddr_len; 6 int ret; 7 char buf[1024]; 8 struct sockaddr_in saddr; 9 10 fd = socket(AF_INET, SOCK_DGRAM, 0); 11 if(fd < 0) 12 { 13 printf("create socket fail! "); 14 return -1; 15 } 16 17 saddr.sin_family=AF_INET; 18 saddr.sin_port=htons(9000); 19 inet_pton(AF_INET,"192.168.6.128",&saddr.sin_addr.s_addr); 20 21 while(1) 22 { 23 printf("cli:"); 24 gets(buf); 25 ret=sendto(fd,buf,1024,0,(struct sockaddr*)&saddr,sizeof(saddr)); 26 27 saddr_len=sizeof(saddr); 28 recvfrom(fd,buf,1024,0,(struct sockaddr*)&saddr,&saddr_len); 29 printf("ser:%s ",buf); 30 } 31 32 close(fd); 33 34 return 0; 35 }
代码2:
#include"common.h" int main() { int fd; int ret; int addr_len; struct sockaddr_in saddr,caddr; char buf[1024]; fd=socket(AF_INET,SOCK_DGRAM,0); if(fd<0) { perror("socket"); } saddr.sin_family=AF_INET; saddr.sin_port=htons(9000); inet_pton(AF_INET,"192.168.6.128",&saddr.sin_addr.s_addr); ret=bind(fd,(struct sockaddr*)&saddr,sizeof(saddr)); if (ret<0) { perror("bind"); } addr_len=sizeof(caddr); while(1) { ret=recvfrom(fd,buf,1024,0,(struct sockaddr*)&caddr,&addr_len); if(ret==-1) { perror("cecvfrom"); } printf("cli:%s ",buf); printf("ser:"); gets(buf); sendto(fd,buf,1024,0,(struct sockaddr*)&caddr,sizeof(caddr)); } close(fd); return 0; }
以上是关于网络编程——UDP编程的主要内容,如果未能解决你的问题,请参考以下文章
网络LinuxLinux网络编程-TCP,UDP套接字编程及代码示范