C++ 中的 socket 发送数据有两个常用的函数,即 send() 和 sendto()。
send() 函数用于向已连接的套接字发送数据,其原型为:
int send(int sockfd, const void *buf, size_t len, int flags);
其中,sockfd 是已连接的套接字文件描述符;buf 是要发送的数据缓冲区;len 是数据的长度;flags 是发送数据的标志,一般为 0。
sendto() 函数用于向指定目的地发送数据,其原型为:
int sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
其中,sockfd 是套接字文件描述符;buf 是要发送的数据缓冲区;len 是数据的长度;flags 是发送数据的标志,一般为 0;dest_addr 是指向目的地地址的结构体指针;addrlen 是目的地地址的长度。
两个函数的返回值都是成功发送的字节数,如果出现错误则返回 -1。可以通过 errno 变量来查看错误代码。
需要注意的是,send() 函数只能用于已连接的套接字,而 sendto() 函数可以用于未连接的套接字,因为它需要指定目的地地址。
另外,在使用 send() 或 sendto() 函数发送数据时,需要注意数据的大小限制。在不同的操作系统中,发送数据的大小限制也不同。一般来说,可以通过 getsockopt() 函数来查询当前系统发送数据的大小限制。