socket 为什么单发送可以 而加上接收却不行了呢?
while(1){//接收memset(revbuffer,0,sizeof(revbuffer));recv(sockConn,revbuffer,1024,0);if...
while(1)
{
//接收
memset(revbuffer,0,sizeof(revbuffer));
recv(sockConn,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, updateUI , 0 , 0 );
}
//发送
if ( flag_user_message == 1 )
{
CString2Char(str_temp_send_message,sendBuf);
send(sockConn,sendBuf,strlen(sendBuf)+1,0);//发送消息到客户端
flag_user_message = 0 ;
}
}
如题。
不添加接收代码 可以客户端 可以收到 而添加了接收却不行了
UINT MyThreeadProc(LPVOID lParam)
{
Cconnect_sDlg *pDlg = (Cconnect_sDlg*) lParam;
sockConn = accept( sockSrv , (SOCKADDR*)&addrClient , &len );
char sendBuf[50];
char revbuffer[50];
sprintf_s(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
while(1)
{
中间那段代码
}
closesocket(sockConn);
return 0;
} 展开
{
//接收
memset(revbuffer,0,sizeof(revbuffer));
recv(sockConn,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, updateUI , 0 , 0 );
}
//发送
if ( flag_user_message == 1 )
{
CString2Char(str_temp_send_message,sendBuf);
send(sockConn,sendBuf,strlen(sendBuf)+1,0);//发送消息到客户端
flag_user_message = 0 ;
}
}
如题。
不添加接收代码 可以客户端 可以收到 而添加了接收却不行了
UINT MyThreeadProc(LPVOID lParam)
{
Cconnect_sDlg *pDlg = (Cconnect_sDlg*) lParam;
sockConn = accept( sockSrv , (SOCKADDR*)&addrClient , &len );
char sendBuf[50];
char revbuffer[50];
sprintf_s(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
while(1)
{
中间那段代码
}
closesocket(sockConn);
return 0;
} 展开
2013-09-23
展开全部
注意,recv、send这两个函数会受网速因素影响
比如说,你在用迅雷下载东西,你的总宽带501K,迅雷速度已经到达500KB/s了,这时 就算你send 500个字节,对方recv只能接收到2个字节 或者一个字节也没有收到。但recv(....)这句语句确实已经执行了 只是接收到了0字节。
send同理,你代码上要发送100字节,迅雷等网速影响可能表面上是发送了100个字节,但实际只会发几个字节,
(呵呵 当然我不是做广告 打个比方)
比如说,你在用迅雷下载东西,你的总宽带501K,迅雷速度已经到达500KB/s了,这时 就算你send 500个字节,对方recv只能接收到2个字节 或者一个字节也没有收到。但recv(....)这句语句确实已经执行了 只是接收到了0字节。
send同理,你代码上要发送100字节,迅雷等网速影响可能表面上是发送了100个字节,但实际只会发几个字节,
(呵呵 当然我不是做广告 打个比方)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看完你的问题,其实是很简单的。但我确信你没有使用线程,当前也别说你开了几个线程的问题。 你的方法纯粹是一个方法,也没有线程调用它,除非你用的是VS2003,因为如果是在高版本中,创建线程是不允许修改UI的,必须使用委托的形式,而这个方法中根本就是直接调用了UI,所以不可以开辟线程的。 而这个方法每执行一次只可以能一个客户端IP的无论你不停的地循环也好,因为没有多线程的支持,所以你也只能一次跟一个人通信,不可以有第二个人通信,如果你要通信,必须开辟第二个线程或者使用两个对象同时运行,但这个不是多线程,所以基本上判定你对线程上根本不懂mqu 要解决这样的事实其实你用多线程是最合适的,如果你不会多线程,也没有关系,那么你可以使用UDP这种不可靠的通信来解决你的问题2840UDP因为事先是不需要客户端建立连接的,所以他是非面向连接,这与TCP不同的时,通信前必须知道通信方的IP地址是不同的,所以UDP能解决你的问题——但是传输是不稳定的,也就是说,丢失信息是常有的事,局网通信会好些 所以给你个建议是,要么去好好学习一下线程知识,要么使用不可靠传输UDP的方式62事实上多线程通信时这里要求你有几个客户端连接osw要开几组线程的。一个线程用来收,一个线程用来发,还要考虑临界资源的应用。不过你的发送线程可以是一个的,因为你只有一个在发,让线程发向指定的地址即可,但接收线程因为是同时,所以必须是多个。
追问
原来你是复制党。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询