欢迎来到天天文库
浏览记录
ID:39469091
大小:127.50 KB
页数:16页
时间:2019-07-04
《udp中socket的用法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、struct sockaddr { unsigned short sa_family; char sa_data[14]; }; 上面是通用的socket地址,此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。具体到Internet socket,用下面的结构,二者可以进行类型转换 。 struct sockaddr_in { short int sin_family;
2、 unsigned short int sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; }; struct in_addr就是32位IP地址。 struct in_addr { union{ struct{u_chars_b1,s_b2,s_b3,s_b4;}S_un_b; struct{u_sho
3、rts_w1,s_w2;}S_un_w; u_longS_addr; }S_un;#defines_addr S_un.S_addr }; in_addr()是将一个点分制的IP地址(如192.168.0.1)转换为上述结构中需要的32位IP地址(0xC0A80001)。通常的用法是: int sockfd; struct sockaddr_in my_addr; sockfd = socket(AF_INET, SOCK_STREAM, 0); my_addr.sin_family
4、 = AF_INET; my_addr.sin_port = htons(MYPORT); my_addr.sin_addr.s_addr = inet_addr("192.168.0.1"); bzero(&(my_addr.sin_zero), 8); bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));sa_family是地址家族,一般都是“AF_xxx”的形式。通常大多用的是都是AF_INET,代表TCP/IP协议族。
5、sa_data是14字节协议地址。sin_family指代协议族,在socket编程中只能是AF_INETsin_port存储端口号(使用网络字节顺序)sin_addr存储IP地址,使用in_addr这个数据结构sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向sockaddr的结构体,并代替它。也就是说,你可以使用sockaddr_in建立你所需要的信息,然后用进行类型转换就可以了bzero((cha
6、r*)&mysock,sizeof(mysock));sin_zero初始值应该使用函数bzero()来全部置零。最典型的源、目的节点socket定义对于源、目的地址和源、目的地址端口,需要建立两个socket变量cliaddr绑定源地址和源端口。servaddr用于connect和sendto的设定目的地址和目的端口。structsockaddr_inservaddr,cliaddr;create_socket(char*server_addr_string,unsignedintNBO,HBO二者转换inet_addr() 将字符串点数格式地址转化
7、成无符号长整型(unsignedlongs_addrs_addr;)inet_aton() 将字符串点数格式地址转化成NBOinet_ntoa()server_port){源socket赋值 bzero(&cliaddr,sizeof(cliaddr)); cliaddr.sin_family=AF_INET; 通常TCP/UDP协议源地址和端口都是随机的 cliaddr.sin_addr.s_addr=htons(INADDR_ANY); cliaddr.sin_port=htons(0);
8、目的socket赋值 bzero(&se
此文档下载收益归作者所有