原创 sockaddr_in sockaddr in_addr区别联系

2009-8-18 10:46 4009 5 5 分类: 处理器与DSP







Updated Jul 19, 2007 by lousia.qian




SOCKET  
UDP,TCP socket通信

Introduction


Details


sockaddr_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个字符长。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /3 下一条