客户端:CSocket类
现在的情况是,服务器与客户端建立连接后,服务器能收到客户端发来的信息,但客户端收不到服务器发回的信息。
以下是客户端的创建套接字及连接服务器的过程:
tablesock.Create(0,SOCK_STREAM);
if(tablesock.Connect("127.0.0.1",6802)==0)
{
AfxMessageBox("连接服务器失败!");
OnCancel();
}
else
{
AfxMessageBox("连接服务器成功!");
}
以下是简化的客户端的接收函数:(服务器的接收函数与之类似,能接收成功)
void CTableSocket::OnReceive(int nErrorCode)
{
int iBytesRead;
iBytesRead=Receive(Rdata_buf,sizeof(Rdata_buf)-1);
Rdata_buf[iBytesRead] ='\0';
CString str2=Rdata_buf;
if(str2.Right(8)!="服务终端")
{
AfxMessageBox("收到非法数据!");
return;
}
else
{
AfxMessageBox("收到数据!");
}
CSocket::OnReceive(nErrorCode);
}
结果是显示连接成功的,服务器端也发送成功,可客户端就是收不到,在OnReceive设了断点,结果没走到这一步,那我想就是之前有错误了,可是连接的都好好的啊,请大家帮帮忙,我已经卡在这好久了。。
10 个解决方案
#1
看不出什么问题。你可以注意看看会不会是在服务端发送之前连接就断开了。
另外用Wireshark可以看到服务和客户端所有的通信包,通过它来判断问题可能更容易。
另外用Wireshark可以看到服务和客户端所有的通信包,通过它来判断问题可能更容易。
#2
先确定你服务器端发送成功没
#3
防火墙都关了试试
#4
发送成功了,我有判断发送成功与否的句子
#5
端口号确定对?
#6
既然客户端能给服务器发了,那应该就是对的啊
#7
看看socket是否弄成局部变量了,(要弄成全局变量或成员变量)服务器发送成功,它只是把数据发送到服务器的发送缓冲区,缓冲区再发给客户端。并不意味着客户端一定会接收到,如果你这中间断了连接,但是服务器还是发到缓冲区了,返回发送成功了。就会造成客户端还是没收到
#8
是成员变量,不管怎么样,还是谢谢了,谢谢费心。
#9
#10
请问楼主解决了吗?
#1
看不出什么问题。你可以注意看看会不会是在服务端发送之前连接就断开了。
另外用Wireshark可以看到服务和客户端所有的通信包,通过它来判断问题可能更容易。
另外用Wireshark可以看到服务和客户端所有的通信包,通过它来判断问题可能更容易。
#2
先确定你服务器端发送成功没
#3
防火墙都关了试试
#4
发送成功了,我有判断发送成功与否的句子
#5
端口号确定对?
#6
既然客户端能给服务器发了,那应该就是对的啊
#7
看看socket是否弄成局部变量了,(要弄成全局变量或成员变量)服务器发送成功,它只是把数据发送到服务器的发送缓冲区,缓冲区再发给客户端。并不意味着客户端一定会接收到,如果你这中间断了连接,但是服务器还是发到缓冲区了,返回发送成功了。就会造成客户端还是没收到
#8
是成员变量,不管怎么样,还是谢谢了,谢谢费心。
#9
#10
请问楼主解决了吗?