为什么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;
} 展开
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;
} 展开
1个回答
展开全部
你是每一次都要重新连接一下你的发送端,发送端会accept两次。
那你的接收端 在while内要closesocket(sockClient);呢? 你close了 还怎么连呢?
你在connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));这里面。
那你的接收端 在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 广告
2023-07-25 广告
环信im即时通讯云具有以下特点:1. 全球部署:环信im即时通讯云在全球范围内设有多个数据中心,可以保证消息在全球范围内的快速传输。2. 高可用性:环信im即时通讯云采用多副本技术,确保数据在出现故障时能够及时恢复,保证消息的可靠传输。3....
点击进入详情页
本回答由环信提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询