網絡編程——UDP編程
阿新 • • 發佈:2018-07-07
運行 recvfrom ret ram 數據 print 編程 return include
一個簡單的聊天代碼:運行結果:
在這個程序之中,由於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!\n"); 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\n",buf); 30 } 31 32 close(fd); 33 34 return0; 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\n",buf); printf("ser:"); gets(buf); sendto(fd,buf,1024,0,(struct sockaddr*)&caddr,sizeof(caddr)); } close(fd); return 0; }
網絡編程——UDP編程