UDP編程中client和server中使用recvfrom和sendto的區別


client中:
      sendto(sfd,buf,strlen(buf),0,(struct sockaddr *)&saddr,len);
      recvfrom(sfd,buf,sizeof(buf),0,NULL,NULL);
server中:
      recvfrom(fd,buf,sizeof(buf),0,(struct sockaddr *)&caddr,&len);
將網絡字節序的IP地址轉換成字符串輸出
// inet_ntoa : struct ip -> char *ip
  char *paddr = NULL;
  paddr = inet_ntoa(caddr.sin_addr);
  printf("client[%s] say:%s\n",paddr,buf);

sendto(fd,buf,strlen(buf),0,(struct sockaddr *)&caddr,len);

struct sockaddr_in saddr;
socklen_t len = sizeof(saddr);

sendto最后兩個參數是(struct sockaddr *)&saddr【 saddr 是自己 新建的sockaddr_in型的變量】,
len【len 是socklen_t型的變量 其值為sizeof(saddr)】在client和server的編程中相似。
recvfrom在client編程中,最后兩個參數應設置為空。但在server編程時,recvfrom的最后兩個參數是(struct sockeaddr *)&caddr和&len。通過inet_ntoa可以將網絡字節序的地址轉換為字符串型的,這樣可增強應用性能,比如:打印。
【注】 sendto函數中使用的是strlen,而recvfrom函數使用的是sizeof。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM