为什么SOCKET通信 只能收到第一条信息呢呢

发送端:UINTMyThreeadProc(LPVOIDlParam){Cconnect_sDlg*pDlg=(Cconnect_sDlg*)lParam;while(f... 发送端:
UINT MyThreeadProc(LPVOID lParam)
{
Cconnect_sDlg *pDlg = (Cconnect_sDlg*) lParam;
while (flag_comm == 1)
{
sockConn = accept( sockSrv , (SOCKADDR*)&addrClient , &len );
char sendBuf[50];
sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));//组合消息发送出去
send(sockConn,sendBuf,strlen(sendBuf)+1,0);//发送消息到客户端
closesocket(sockConn);

sockConn = accept( sockSrv , (SOCKADDR*)&addrClient , &len );
sprintf(sendBuf,"再来一次");//组合消息发送出去
send(sockConn,sendBuf,strlen(sendBuf)+1,0);//发送消息到客户端

closesocket(sockConn);
}

return 0;
}

接收端:
UINT MyThreadProc(LPVOID lParam)
{
Cconnect_cDlg *pDlg = (Cconnect_cDlg*)lParam;

while (1)
{
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
memset(revbuffer,0,sizeof(revbuffer));
recv(sockClient,revbuffer,1024,0);
if (revbuffer[0] != 0 )
{
temp_str_recvbuffer = revbuffer;
temp_str_recvbuffer += "\r\n";
pDlg->m_talkwin += temp_str_recvbuffer;
::PostMessage(pDlg->m_hWnd, WM_TASK_UPDATE_UI_MSG, 0, 0);//就是刷心下界面
}
closesocket(sockClient);
}

return 0 ;
}
发送端修改为:
UINT MyThreeadProc(LPVOID lParam)
{
Cconnect_sDlg *pDlg = (Cconnect_sDlg*) lParam;
sockConn = accept( sockSrv , (SOCKADDR*)&addrClient , &len );
while (flag_comm == 1)
{
char sendBuf[50];
sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));//组合消息发送出去
send(sockConn,sendBuf,strlen(sendBuf)+1,0);//发送消息到客户端

}
closesocket(sockConn);
return 0;
}
展开
 我来答
小靖锅锅
2013-09-18 · 超过60用户采纳过TA的回答
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:132万
展开全部
你是每一次都要重新连接一下你的发送端,发送端会accept两次。
那你的接收端 在while内要closesocket(sockClient);呢? 你close了 还怎么连呢?
你在connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));这里面。
追问
能在具体说说嘛?我该怎么调整顺序呢?发送端的我好想明白点了 是把sockConn = accept( sockSrv , (SOCKADDR*)&addrClient , &len ); 拿到WHILE循环外面是吗?可是接收端 没太明白
追答
其实我是没理解你为什么要每次发送一条信息都要连接一次对方。如果你不断开的话是可以继续发送的。
你这种写法的话。你在接收端while最后是关闭socket你关闭的是连接对面需要的socket而不是现在connect中的socket我记得connect是会返回一个socket描述符的。你可以关闭那一个。
环信
2023-07-25 广告
环信im即时通讯云具有以下特点:1. 全球部署:环信im即时通讯云在全球范围内设有多个数据中心,可以保证消息在全球范围内的快速传输。2. 高可用性:环信im即时通讯云采用多副本技术,确保数据在出现故障时能够及时恢复,保证消息的可靠传输。3.... 点击进入详情页
本回答由环信提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式