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。
