socket 客户端接收数据不全!~

jilianfeng jilianfeng 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
如题:
我是使用异步事件 进行接收数据的!请哪位老大指点下,如何才能接受全部的数据!接受步骤如下!

void CMYDlg::wss()//给服务端发送数据
{
tjz();
char sendText[100];
int numsnt,status;

sprintf(sendText,"WSS:%s$%s$%s",uname,city,Sb);

//MessageBox(sendText);
numsnt=send(ClientSock2, sendText, strlen(sendText) + 1, NO_FLAGS_SET);

if (numsnt!= (int)strlen(sendText)+1)
{
// MessageBox("ERROR: Connection terminated!","aasasa",MB_OK);
//status=closesocket( ClientSock2);
if (status == SOCKET_ERROR)
// MessageBox("ERROR: closesocket unsuccessful!","aa",MB_OK);
//status=WSACleanup();
closesocket( ClientSock2);
// if (status == SOCKET_ERROR)
// MessageBox("ERROR: WSACleanup unsuccessful!","aa",MB_OK);
return ;
}
//MessageBox(sendText);
else
{
if(WSAAsyncSelect(ClientSock2, m_hWnd, NETWORK_EVENT, FD_CLOSE | FD_READ ) == SOCKET_ERROR)
{
// MessageBox("注册网络异步事件失败!");
WSACleanup();

}
}
//MessageBox("异步成功");
}
void CMYDlg::OnNetEvent(WPARAM wParam, LPARAM lParam)
{
int iEvent1 = WSAGETSELECTEVENT(lParam);
//调用Winsock API函数,得到发生此事件的客户端套接字
SOCKET CurSock= (SOCKET)wParam;
switch(iEvent1)
{

case FD_READ: //网络数据包到达事件
OnReceive( CurSock);
break;


case FD_CLOSE: //客户端断开事件
OnClose( CurSock);
break;
default: break;
}
}

void CZKDlg::OnReceive(SOCKET CurSock)
{
try
{
char recvText[40480];
int numrcv;
Sleep(500);
numrcv=recv(ClientSock2, recvText, 40480,0);
if ((numrcv == 0) || (numrcv == SOCKET_ERROR))
{
//MessageBox("ERROR: Connection terminated!","aa",MB_OK);
status=closesocket(ClientSock2);
if (status == SOCKET_ERROR)
//MessageBox("ERROR: closesocket unsuccessful!","aa",MB_OK);
status=WSACleanup();
//if (status == SOCKET_ERROR)
// MessageBox("ERROR: WSACleanup unsuccessful!","aa",MB_OK);

}
recvText[numrcv]='\0';//这里接收到得 数据 有的时候不全,请问哪位老大能告诉如何修改接收的代码能使数据完全接收!

//MessageBox(recvText);
}
...全文

相关推荐

评论 30
收藏 已收藏
分享
返回顶部
jilianfeng
网络编程 18,356 成员 64,161 内容