在写网络程序的时候,建立TCP socket:
sock = socket(PF_INET, SOCK_STREAM, 0);
然后在绑定本地地址或连接远程地址时需要初始化sockaddr_in结构,其中指定address family时一般设置为AF_INET,即使用IP。
相关头文件中的定义:
AF = Address Family
PF = Protocol Family
AF_INET = PF_INET
所以在windows中AF_INET与PF_INET完全一样. 而在Unix/Linux系统中,在不同的版本中这两者有微小差别. 对于BSD, 是AF, 对于POSIX是PF. 理论上建立socket时是指定协议,应该用PF_xxxx,设置地址时应该用AF_xxxx。当然AF_INET和PF_INET的值是相同的,混用也不会有太大的问题。
在函数socketpair与socket的domain参数中有AF_UNIX,AF_LOCAL,AF_INET,PF_UNIX,PF_LOCAL,PF_INET. 这几个参数有AF_UNIX=AF_LOCAL, PF_UNIX=PF_LOCAL, AF_LOCAL=PF_LOCAL, AF_INET=PF_INET.
建议:
对于socketpair与socket的domain参数,使用PF_LOCAL系列, 而在初始化套接口地址结构时,则使用AF_LOCAL. 例如:
z = socket(PF_LOCAL, SOCK_STREAM, 0);
adr_unix.sin_family = AF_LOCAL;
分享到:
相关推荐
在C中,创建一个数据报套接字需要调用`socket()`函数,指定`PF_INET`(或`AF_INET`)域和`SOCK_DGRAM`类型,这表示我们将使用UDP协议。接着,服务器需要绑定到一个特定的IP地址和端口号,通过`bind()`函数完成。在AF...
inet_pton(AF_INET, SERVER_IP, &server.sin_addr); // 将服务器IP转换为网络字节序 server.sin_port = htons(PORT); connect(socket_desc, (struct sockaddr *)&server, sizeof(server)); ``` 数据传输: 6. 使用...
对于UDP,我们需要指定`PF_INET`(表示IPv4)作为协议族,`SOCK_DGRAM`作为Socket类型。 ```c int server_socket = socket(PF_INET, SOCK_DGRAM, 0); ``` 2. 绑定地址:使用`bind()`函数将Socket与特定的IP地址...
- `gethostbyaddr($binary, AF_INET)`: 根据二进制格式的IP地址获取其主机名。 - `getservbyname($service, $protocol)`: 根据服务名和服务类型获取端口号。 示例代码: ```perl my $ip = '127.0.0.1'; my $binary ...
1. **PF_INET6与AF_INET6的区别**:PF是对协议族的总称,而AF是具体的地址家族,两者在socket编程中都是为了标识不同的通信协议,AF_INET6是PF_INET6的一个实例。 2. **IPv6地址结构**:IPv6地址由128位组成,通常...
server.sin_family = PF_INET; server.sin_port = htons(PORT); server.sin_addr.s_addr = inet_addr(SERVER_ADDRESS); connect(sClient, (struct sockaddr *)&server, sizeof(SOCKADDR_IN)); char szMessage...
domain:说明我们网络程序所在的主机采用的通讯协族(AF_UNIX 和AF_INET 等). AF_UN IX 只能够用于单一的 Unix 系统进程间通信,而 AF_INET 是针对Internet的,因而可以允许在 远程 主机之间通信(当我们 man socket ...
然后,使用`socket()`函数创建一个Socket描述符,指定协议族(PF_INET)和类型(SOCK_DGRAM,表示UDP)。例如: ```c int socket_fd = socket(PF_INET, SOCK_DGRAM, 0); ``` 服务器端的代码通常包括以下几个步骤:...
- **地址族(Address Family)**: 如PF_INET对应于IP地址,定义了网络地址的格式。 - **类型(Socket Type)**: 如SOCK_STREAM表示面向连接的TCP,SOCK_DGRAM表示无连接的UDP。 2. **创建Socket** 创建Socket...
例如,在Windows中`AF_INET`和`PF_INET`表示相同的意思,而在UNIX/Linux系统中,`AF`和`PF`可能有所区别。对于UNIX域套接字,推荐使用`PF_LOCAL`系列作为`socket()`函数的`domain`参数,而在初始化套接字地址结构时...
server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT_NUMBER); // PORT_NUMBER是你想要监听的端口 server_addr.sin_addr.s_addr = INADDR_ANY; ``` 3. **bind()**: 将创建的套接字与本地地址关联...
- `domain`指定所使用的协议族,通常为`PF_INET`表示IPv4。 - `type`指定Socket类型,如`SOCK_STREAM`(流式套接字,基于TCP)或`SOCK_DGRAM`(数据报套接字,基于UDP)。 - `protocol`通常设置为0,表示使用默认...
server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); server_addr.sin_addr.s_addr = INADDR_ANY; // 任何可用的IP地址 ``` 3. **绑定地址**:使用`bind()`函数将套接字与地址关联。 `...
域类型可以为 AF_INET 或 PF_INET 或 AF_INET6;数据类型通常有两种:SOCK_STREAM(字节流套接口)和 SOCK_DGRAM(数据报套接口);协议类型可以用协议号代替,也可以用 getprotobyname 函数来获取。 例如: ...
sock = socket(PF_INET, SOCK_DGRAM, 0); if(sock == -1){ error_handling("socket error"); } memset(&my_adr, 0, sizeof(my_adr)); my_adr.sin_family = AF_INET; my_adr.sin_addr.s_addr = htonl(INADDR_...
server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); // 端口号 server_addr.sin_addr.s_addr = INADDR_ANY; // 绑定所有可用IP ``` 3. **绑定套接字**:服务器需要使用`bind()`...
2. **创建UDP套接字**:使用`socket()`函数创建一个UDP套接字,指定协议类型为`PF_INET`,协议族为`SOCK_DGRAM`。 3. **绑定端口**:使用`bind()`函数将创建的套接字与特定的IP地址和端口号绑定,这样发送和接收的...
创建UDP套接字需要调用`socket()`函数,参数指定为`PF_INET`(表示IPv4)和`SOCK_DGRAM`(表示UDP)。接着,使用`bind()`函数绑定本地地址和端口,以便接收数据。地址结构`struct sockaddr_in`包含了IP地址和端口号...
- **创建Socket**:调用`socket()`函数创建一个Socket描述符,指定协议类型为TCP(`AF_INET`或`AF_INET6`),协议族为`PF_INET`或`PF_INET6`。 - **绑定地址**:使用`bind()`函数将Socket与一个特定的IP地址和端口...