linux下socket通信常用的结构与头文件

来源:互联网 发布:算法1mints.txt 编辑:程序博客网 时间:2024/04/27 13:24

参考书籍:

《TCP/IP详解,卷1:协议》

《TCP/IP详解 卷2:实现》

《计算机网络第五版》谢希仁

《unix网络编程》


1. 错误提示: 

a) Connection refused :连接被拒绝
 
2. Socket 通信常用的头文件
a) Sys/socket.h :
i. sockaddr 结构: struct sockaddr是通用的套接字地址 是linux 网络通信的地址结构体的一种,其定义如下:
 struct sockaddr
{
unsigned short  sa_family ; /* address family*/
Char sa_data[14] ; /*up to 14 bytes of direct address */
} ;
说明:
Sa_family : 是地址家族,也成作,协议族,一般都是"AF_XXX"的形式,常用的有
AF_INET  Arpa(TCP/IP) 网络通信协议
AF_UNIX  UNIX 域协议(文件系统套接字)
AF_ISO    ISO标准协议
AF_NS    施乐网络体统协议
AF_IPX  Novell IPX 协议
AF_APPLETALK   Appletalk DDS 
 

Sa_data:  是14字节的协议地址


B)  netinet/in.h : 
struct socketaddr_in : struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。
定义如下:
Struct sockaddr_in 
{
__SOCKADDR_COMMN ( sin_ );
in_port_t sin_port ; /* prot number . */
Struct in_addr sin_addr ;  /* Internet address . */
/*  Pad to size of 'struct sockaddr' . */
Unsigned char sin_zero[sizeof ( struct sockaddr ) - __SOCKADDR_COMMON_SIZE - sizeof ( in_port_t ) - sizeof( struct in_addr )];

};


C)  sys/un.h : 
Struct socketaddr_un : 真对UNIX域套接字地址, struct sockaddr是通用的套接字地址,而struct sockaddr_un则是UNIX环境下套接字的地址形式,一般情况下,需要把sockaddr_un结构强制转换成sockaddr结构再传入系统调用函数中。
 
结构定义如下:
Struct socketaddr_un
{
_SOCKADDR_COMMON(sun_);  // __SOCKADDR_COMMON(sun_) 宏定义对应的定义为 sa_family_t sun_family
Char sun_path[108];

};


结束语:

想来你是要进行网络编程,使用socket, listen, bind等函数。你只要记住,填值的时候使用sockaddr_in结构,而作为函数的参数传入的时候转换成sockaddr结构就行了,毕竟都是16个字符长。

原创粉丝点击