使用UDP传输,偶发会出现慢1分钟;当Receive接收端处理速度太慢,接收的数据是一段时间之前的数据,怎么解决?
代码如下:
初始化
client = new UdpClient(new IPEndPoint(IPAddress.Parse(LocalIP), Port));
client.Client.ReceiveTimeout = 300;
client.Client.SendTimeout = 300;
client.Client.ReceiveBufferSize = 1024 * 1024;//新增接收缓存增大
/// <summary>
/// 网络接收线程
/// </summary>
private void ReceiveThread()
{
IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0);
//开始循环监听
while (true)
{
if (IsOpen && client != null)
{
try
{
if (client.Available==0)//预防没有数据线程阻塞
{
continue;
}
byte[] bytes = client.Receive(ref remotePoint);//接收数据,**监控发现这里的数据接收慢了。**
if (remotePoint.Address.ToString() != LocalIP)//如果为本机IP,则不触发接收事件
{
Dictionary<string, byte[]> keyValuePairs = new Dictionary<string, byte[]>();
keyValuePairs.Add(remotePoint.Address.ToString(), bytes);
lock (ReceiveList)
{
ReceiveList.Add(keyValuePairs);//这里在另外一个线程进行解析操作。
}
}
}
catch (SocketException se)
{
if (se.SocketErrorCode != SocketError.ConnectionReset)
//throw se;
Log.Instance.WriteLog("UDP报错", se.Message + se.StackTrace+"错误码:"+ se.SocketErrorCode + "");
}
catch (System.Exception ex)
{
Log.Instance.WriteLog("UDP报错", ex.Message + ex.StackTrace);
}
}
}
}