如果在接收前2分钟内没有发送数据,我的udp客户端无法从服务器接收任何内容。这很奇怪,如果我呼叫发送,它可以再次接收。我在Windows上的模拟器中运行应用程序,WireShark可以捕获所有数据包,但我的应用程序无法检测到它。我想知道是否因为arp表已过期。
这只发生在移动设备和模拟器上,而不是统一。
任何人都知道为什么?感谢您的回答。
udp客户端代码:
private UdpClient m_udpClient = null;
private IPEndPoint m_IPEndPoint = null;
public override bool Connect(string strIp, int nPort)
{
if (nPort == 0 || strIp.Length == 0)
return false;
if (m_udpClient == null || (m_udpClient.Client == null || !m_udpClient.Client.Connected))
{
m_udpClient = new UdpClient();
try
{
m_udpClient.Connect(strIp, nPort);
}
catch (SocketException ex)
{
DebugLog.log("ex : " + ex.ToString());
}
if (m_udpClient.Client != null && m_udpClient.Client.Connected)
{
IPAddress address = IPAddress.Parse(strIp);
m_IPEndPoint = new IPEndPoint(address, nPort);
return true;
}
}
return false;
}
private void receive()
{
while (m_udpClient.Client.Available > 0)
{
Byte[] data = null;
try
{
data = m_udpClient.Receive(ref m_IPEndPoint);
}
catch (Exception e)
{
DebugLog.log(e.ToString());
}
if (data != null && data.Length > 0)
{
UnityEngine.Debug.Log ("receive,len:" + data.Length);
}
}
}
private void send(byte[] buf, int size)
{
if (IsConnected())
{
try
{
m_udpClient.Send(buf, size);
}
catch (Exception ex)
{
DebugLog.log("ex : " + ex.ToString());
}
}
}
public override bool IsConnected()
{
return m_udpClient != null && m_udpClient.Client != null && m_udpClient.Client.Connected;
}
答案 0 :(得分:0)
我有同样的问题! 在UDP服务器和客户端之间,我们使用“heartbeat-packet”,没有问题。 当我停止“heartbeat-packet”,15秒后,服务器无法接收数据包, 但wiresharp可以捕获所有数据包。
我的网络很简单,只需将PC直接连接设备即可。
到目前为止,我还没有找到真正的原因。 只需通过重复发送“空包”,当“心跳包”被停止时修复它。