c# - C# UdpClient 发送中断接收和 WCF
问题描述
我正在尝试创建一个简单的应用程序来在 DualMode 下测试 UdpClient。这个想法是你运行两个不同版本的应用程序,它们具有相反的发送和接收端口,它们相互发送数据包。这只是一个概念证明。发生的事情是,当我执行 UdpClient.Send 时,即使发送和接收位于不同的端口上,它也会在没有数据的情况下中断接收。更糟糕的是,当我在我的主应用程序中尝试此操作时,它还会关闭我在 net.tcp 上运行的 WCF 连接。这是代码:
static void Main(string[] args)
{
int port = int.Parse(args[0]);
int destPort = int.Parse(args[1]);
Console.Out.WriteLine($"Listening on {port}");
Console.Out.WriteLine($"Sending to {destPort}");
var client = CreateDualClient(port);
Task.Factory.StartNew(() =>
{
IPEndPoint from = new IPEndPoint(IPAddress.Any, 0);
while (!Console.KeyAvailable)
{
try
{
var fromdata = client.Receive(ref from);
Console.Out.WriteLine($"Received {fromdata.Length} bytes from {from.ToString()}");
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
});
//client.BeginReceive(UdpPacketReceived, new ReceiverData() {Client = client, IsMulticast = false});
var data = new byte[400];
var ip = Dns.GetHostAddresses("localhost");
var destEndpoint = new IPEndPoint(ip[0], destPort);
while (!Console.KeyAvailable)
{
Console.Out.WriteLine($"Sending To {destEndpoint}");
client.Send(data, data.Length, destEndpoint);
Thread.Sleep(1000);
}
}
public static UdpClient CreateDualClient(int port)
{
var client = new UdpClient(AddressFamily.InterNetworkV6);
client.ExclusiveAddressUse = false;
client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
client.Client.DualMode = true;
var ep1 = new IPEndPoint(IPAddress.IPv6Any, port);
client.Client.Bind(ep1);
return client;
}
例外是:
"System.Net.Sockets.SocketException (0x80004005): An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.ReceiveFrom(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, EndPoint& remoteEP)
at System.Net.Sockets.UdpClient.Receive(IPEndPoint& remoteEP)
at UdpDualCastTest.Program.<>c__DisplayClass0_0.<Main>b__0() in D:\Subversion\Starfish\Trunk\code\UdpDualCastTest\Program.cs:line 34
如果我注释掉发送,我不会得到例外。如果我忽略异常但运行另一个应用程序,则异常会停止发生,直到我杀死相反的应用程序(相同的应用程序,但参数颠倒了)。
我在这里做错了什么?为什么发送会破坏我的接收,同时也会破坏我的 WCF net.tcp 连接?
解决方案
推荐阅读
- java - 如何实现特定的类型转换器?
- reactjs - Redux Form 没有触发提交功能
- python - 无法在 Heroku 上运行 Flask Socket.io chatapp:进程以状态 4 退出
- python - 按字符串反向排序列表
- python - 按钮未显示在窗口中
- java - 第二个 JPanel 和 JTexField 看起来太局促了
- java - 一个程序中的多个 Elasticsearch 连接
- python - 如何处理 docker 容器中的 403 禁止错误?
- testing - JMeter如何连续运行两个并行线程集
- python-3.x - Python - 带有 if 的 for 循环