服务器端:
客户端:
服务器端:
客户机端:
需要学习的函数还有
send()
函数用于在套接字上发送数据。它是网络编程中发送数据到对端的主要函数之一。
函数原型:
#include |
ssize_t send(int sockfd, const void *buf, size_t len, int flags); |
返回值:成功时返回发送的字节数(可能小于请求发送的字节数),出错时返回-1并设置errno。
recv()
函数用于从套接字接收数据。它是网络编程中接收对端发送数据的主要函数之一。
函数原型:
#include |
ssize_t recv(int sockfd, void *buf, size_t len, int flags); |
返回值:成功时返回接收到的字节数(可能小于请求接收的字节数,例如,当对方发送的数据量小于请求量时),连接被对方正常关闭时返回0,出错时返回-1并设置errno。
read()
函数是UNIX/Linux系统调用之一,用于从文件描述符(包括套接字)读取数据。在网络编程中,它也可以用来从套接字接收数据,但通常recv()
函数更为常用,因为recv()
提供了更丰富的错误处理和选项。
函数原型:
#include |
ssize_t read(int fd, void *buf, size_t count); |
返回值:成功时返回读取的字节数(可能小于请求读取的字节数),到达文件末尾时返回0,出错时返回-1并设置errno。
send()
和 recv()
专门用于套接字通信,而 read()
虽然也可以用于套接字,但更通用,可用于文件、管道等多种类型的文件描述符。send()
和 recv()
提供了更丰富的网络编程特性,如消息边界的保持(在某些套接字类型中),而 read()
则更基础,更通用。send()
和 recv()
的性能与 read()
相当,但使用send()
和 recv()
可以使代码更清晰,更易于理解和维护。