Unix/Linux编程:UDS 数据报
〇、前言
对于recvfrom()
来讲,src_addr 和 addrlen 参数会返回用来发送数据报的远程 socket 的地址。
(这些参数类似于 accept()
中的 addr 和 addrlen 参数,它们返回已连接的对等 socket 的地址。) src_addr 参数是一个指针,它指向了一个与通信 domain 匹配的地址结构。与 accept()
一样, addrlen 是一个值-结果参数。在调用之前应该将 addrlen 初始化为 src_addr 指向的结构的大小;在返回之后,它包含了实际写入这个结构的字节数。
一、接收:recvfrom()
在Socket编程中,recvfrom()
函数用于从套接字接收数据,并获取发送方的地址信息。它适用于基于数据报的套接字,如UDP套接字。recvfrom()
函数的原型如下:
1 |
|
- sockfd:Socket文件描述符,表示要接收数据的套接字。
- buf:指向接收数据的缓冲区的指针。
- len:缓冲区的大小,表示最多接收多少字节的数据。
- flags:标志参数,用于控制接收操作的行为,通常设置为0。
- src_addr:指向struct sockaddr类型的指针,用于存储发送方的地址信息。
- addrlen:指向socklen_t类型的指针,用于存储src_addr结构体的大小。
在调用recvfrom()
函数时,需要提供一个已经创建和绑定的套接字,并传递一个缓冲区以存储接收到的数据。函数将阻塞,直到有数据到达套接字。
当接收到数据时,recvfrom()
函数将数据存储在提供的缓冲区中,并将发送方的地址信息存储在src_addr中。实际接收的字节数将作为函数的返回值返回,如果返回值为-1,则表示发生了错误。
下面是一个简单的示例,演示如何使用recvfrom()
函数接收UDP套接字的数据:
1 |
|
二、发送:sendto()
在Socket编程中,sendto()
函数用于通过套接字发送数据到指定的目标地址。它适用于基于数据报的套接字,如UDP套接字。sendto()
函数的原型如下:
1 |
|
- sockfd:Socket文件描述符,表示要发送数据的套接字。
- buf:指向要发送的数据的缓冲区的指针。
- len:要发送的数据的字节数。
- flags:标志参数,用于控制发送操作的行为,通常设置为0。
- dest_addr:指向struct sockaddr类型的目标地址结构体的指针,用于指定发送数据的目标地址。
- addrlen:dest_addr结构体的大小。
下面是一个简单的示例,演示如何使用sendto()
函数发送UDP套接字的数据:
1 |
|
三、运行
编译运行之后,启动客户端和服务端,键入:
1 |
|
可以在服务端看到:
1 |
|
可以看到运行结果符合预期。
全文完,感谢阅读。
Unix/Linux编程:UDS 数据报
http://blog.luliang.online/2023/06/08/Unix!Linux编程:UDS 数据报/