首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络协议 >

VC下winsock实现TCP时recv()的有关问题

2012-02-10 
VC下winsock实现TCP时recv()的问题我在VC下用winsock实现TCP,分别写了客户端和服务器,用着两个在两台机子

VC下winsock实现TCP时recv()的问题
我在VC下用winsock实现TCP,分别写了客户端和服务器,用着两个在两台机子上通讯没有任何问题。现在我在一块板子上实现TCP服务器端,板子与PC机用网线相连,PC机上运行我自己编写的客户端(服务器端暂时不用),同时抓包。
  我客户端接收函数代码如下:
LRESULT CTCP_ClientDlg::OnReceive(WPARAM wParam, LPARAM lParam)
{
  UpdateData(true);

if (WSAGETSELECTEVENT(lParam) == FD_READ)
{
char recvBuf[1000];
memset(recvBuf, 0, 1000);
  Sleep(10); 
int BRead=recv(srvsock,recvBuf,1000,0);
  fflush(stdin);
  if (BRead == SOCKET_ERROR)
{
MessageBox("接收到一个错误信息. ");
}
   
else
{
MessageBox("接收到一个信息");
  m_receive+=recvBuf;
m_receive+="\r\n";
UpdateData(false);
}

}

  else if (WSAGETSELECTEVENT(lParam) == FD_CLOSE)
{  
  closesocket(srvsock);
m_LinkState="连接断开了!";
}

 
return 0L;
}

现在的问题是TCP连上了,就是数据传输的时候,自己编的客户端总是接收数据搞没了。我抓包确定板子发了数据,而且MessageBox("接收到一个信息");对话框也跳出来了,编辑框里面光标下移了,就是没有数据显示。(有时数据接收是正常的)。请教大家,这是什么问题?

[解决办法]
"int BRead=recv(srvsock,recvBuf,1000,0); "
它的返回值有可能=0;你用的是阻塞的还是非阻塞的呢?
如果走到了“MessageBox("接收到一个信息"); ”这个地方。
你改成如下看下“if(BRead > 0) MessageBox(recvBuf);”



[解决办法]
非阻塞情况下,你得重复去调用recv 这个函数,直到它返回成功,这样才能确保读到了数据

热点排行