SOCKET UDP,TCP socket通信 IntroductionDetailssockaddr_in sockaddr in_addr区别联系 struct sockaddr { unsigned short sa_family; // address family, AF_xxx char sa_data14; // 14 bytes of protocol address }; struct sockaddr_in { short int sin_family; // Address family unsigned short int sin_port; // Port number struct in_addr sin_addr; // Internet address unsigned char sin_zero8; // Same size as struct sockaddr }; struct in_addr { unsigned long s_addr; // that’s a 32-bit long, or 4 bytes }; socket(1,2,3) 1.AF_INET:Address Family 网络通信有很多地址族,但网络通信只用到AF_INET,在这特指TCP/IP协议,但其实一个Address Family可包含多个协议族,多个协议。 2.Service type:在这个地址上走什么服务, SOCK_STREAM ----stream TCP服务 但stream不只有tcp,还有其他。 SOCK_DGRAM ---- DataGram UDP服务,但datagram不只有udp,还有其他。 SOCK_RAW 3.协议类型 protocol type: PROTO_TCP ,PROTO_UDP UDP SOCKET fd = socket(AF_INET, SOCK_DGRAM, 0); client端: recvfrom(), sendto() server端: bind(), recvfrom(), sendto() struct sockaddr_in srvaddr; srvaddr.sin_family = AF_INET; srvaddr.sin_addr.s_addr = inet_addr("127.0.0.1") || htonl(INADDR_ANY); inet_addr作用: 转化成整形IP,并且是网络字节序。 srvaddr.sin_port = htons(10000); 主机字节序和网络字节序转换: htonl,htons,ntohl,ntohs TCP socket client端:socket() ,connect(), read(), write(), server端:socket() , bind(). accept, read(), write() 使用socket, listen, bind等函数,只要记住,填值的时候使用sockaddr_in结构,而作为函数的参数传入的时候转换成sockaddr结构就行了,毕竟都是16个字符长。 |
文章评论(0条评论)
登录后参与讨论