mfc socket接收数据问题
A机:192.168.1.13:32768B机:192.168.1.88::5080A机是一台其他厂商的服务器,里面会通过网络B机器发送一段数据,我现在要做的就是在B机器...
A机:192.168.1.13:32768
B机:192.168.1.88::5080
A机是一台其他厂商的服务器,里面会通过网络B机器发送一段数据,我现在要做的就是在B机器上接收这段数据
我在B机器上代码如下:(CUdpSocket是在网上下的一个类,里面只是重写了OnReceive)
m_pSocket = new CUdpSocket();
m_pSocket->Create(m_localPortNum, SOCK_DGRAM); //m_localPortNum=5080
m_pSocket->Bind(m_peerPortNum, m_strPeerIPaddr); //m_peerPortNum=32768; m_strPeerIPaddr=192.168.1.13
m_pSocket->SendTo(m_dataToSend, m_dataToSend.GetLength(), m_peerPortNum, m_strPeerIPaddr);//发送的数据随意乱填
这样是可以接收到数据的,但是这样必须要知道A机的IP地址和A机器的端口,在C#里只需要:
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(ip, port); //ip=192.168.1.88,port=5080
EndPoint ep = (EndPoint)iep;
socket.Bind(iep);
while (true)
{
byte[] buffer = new byte[1024];//设置缓冲数据流
socket.ReceiveFrom(buffer, ref ep);//接收数据,并确把数据设置到缓冲流里面
string tempstr = Encoding.Default.GetString(buffer).Replace("\0", "").TrimEnd('');
if (!string.IsNullOrEmpty(tempstr))
str = tempstr;
}
这样也可以接收数据,而且只需要指定B机器的内网IP和固定的5080端口即可
问题是:这两种方式,为什么在mfc里必须要sendTo一下?才能接收到A机发过来的数据(我的认为是在mfc里,两个没有建立连接?所以接收不到?)如何能实现跟C#那样,不用指定A机器的ip和端口,自动连接上。 展开
B机:192.168.1.88::5080
A机是一台其他厂商的服务器,里面会通过网络B机器发送一段数据,我现在要做的就是在B机器上接收这段数据
我在B机器上代码如下:(CUdpSocket是在网上下的一个类,里面只是重写了OnReceive)
m_pSocket = new CUdpSocket();
m_pSocket->Create(m_localPortNum, SOCK_DGRAM); //m_localPortNum=5080
m_pSocket->Bind(m_peerPortNum, m_strPeerIPaddr); //m_peerPortNum=32768; m_strPeerIPaddr=192.168.1.13
m_pSocket->SendTo(m_dataToSend, m_dataToSend.GetLength(), m_peerPortNum, m_strPeerIPaddr);//发送的数据随意乱填
这样是可以接收到数据的,但是这样必须要知道A机的IP地址和A机器的端口,在C#里只需要:
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(ip, port); //ip=192.168.1.88,port=5080
EndPoint ep = (EndPoint)iep;
socket.Bind(iep);
while (true)
{
byte[] buffer = new byte[1024];//设置缓冲数据流
socket.ReceiveFrom(buffer, ref ep);//接收数据,并确把数据设置到缓冲流里面
string tempstr = Encoding.Default.GetString(buffer).Replace("\0", "").TrimEnd('');
if (!string.IsNullOrEmpty(tempstr))
str = tempstr;
}
这样也可以接收数据,而且只需要指定B机器的内网IP和固定的5080端口即可
问题是:这两种方式,为什么在mfc里必须要sendTo一下?才能接收到A机发过来的数据(我的认为是在mfc里,两个没有建立连接?所以接收不到?)如何能实现跟C#那样,不用指定A机器的ip和端口,自动连接上。 展开
1个回答
展开全部
m_pSocket->Create(m_localPortNum, SOCK_DGRAM); //m_localPortNum=5080
你选择的是UDP不是TCP所以得指定A机器的ip和端口,不过你也可以直接connect后用send发送(可以不指定IP和端口的)。
你选择的是UDP不是TCP所以得指定A机器的ip和端口,不过你也可以直接connect后用send发送(可以不指定IP和端口的)。
更多追问追答
追问
能具体点吗?谢谢,我刚接触mfc
追答
与MFC无关,你去查查UDP与TCP,socket编程的区别,我觉得你可能没学原始的socket,而是习惯直接调的包装好的类,不是很明白原理。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询