我用socket通讯的时候,明明传送过来的字符大小是12654多个,而接收端也申请了12654个char 内存,但是我用recv函数得到的都只有大概8764个,不论如何测试,都是只接收到那么多,是不是recv函数的接收缓存区只有那么多,如果微软默认的是8K的话,那也应该是8192,为什么会接收不到所有的字符,请问是不是有什么函数设置recv函数接收的最大缓存区.
我是用VC和JAVA通讯的,不知这个有没有关系.
谢谢.
我是用VC和JAVA通讯的,不知这个有没有关系.
谢谢.
调试欢乐多
因为socket默认的缓冲区大小是8K,你一次当然只能接收8K的数据了:
方法一:
//设置socket接收缓冲区大小为128K int nRecvBuf=128*1024;
setsockopt(m_hConnectSocket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
方法二:
int nRead=0,nLeft=BUFFER_AUTO_INC_SIZE/*缓冲区大小*/,nLen=0,nLength=0;
while(nLeft>0)
{
nRead=recv(m_hConnectSocket,(char*)pBuff/*缓冲区*/, nLeft,0);
if(nRead==SOCKET_ERROR||nRead<=0||nRead==WSAEWOULDBLOCK)
{
break;
}
nLeft -= nRead;
pBuff += nRead;
nLen +=nRead;
gdy119(中国制造) 已经给出代码了!