正在做tcp协议的程序,由于发送的数据较大,所以的设置tcp套接口缓冲区的大小,否则接收到的数据只是发送的一部分。我要做的是发送采集到的图像数据,不设置缓冲去的大小,每次接受到的图像总有一部分是黑色的或者整个图像都是黑色的。
关于getsockopt()/setsockopt()函数的参数格式,相关的介绍很多,我只写设置缓冲区的形式:
SO_RCVBUF和SO_SNDBUF每个套接口都有一个发送缓冲区和一个接收缓冲区,使用这两个套接口选项可以改变缺省缓冲区大小。
// 接收缓冲区
int nRecvBuf=32*1024; //设置为32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
//发送缓冲区
int nSendBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));
注意:
当设置TCP套接口接收缓冲区的大小时,函数调用顺序是很重要的,因为TCP的窗口规模选项是在建立连接时用SYN与对方互换得到的。对于客户,SO_RCVBUF选项必须在connect之前设置;对于服务器,SO_RCVBUF选项必须在listen前设置。
getsockopt()的设置比较简单,不在赘述。