【问题标题】:Remove IPEndpoint Bind删除 IPEndpoint 绑定
【发布时间】:2016-10-20 18:50:05
【问题描述】:

我有一个类似于弹出窗口的小表单 (FORM2)。它将 IPAddress 作为参数并连接到它。下面的代码显示了连接

myNewUDP.newUDPClient = new UdpClient();
myNewUDP.newEP        = new IPEndPoint(IPAddress.Parse("255.255.255.255"), PORT);
IPEndPoint newBindEP  = new IPEndPoint(IPAddress.Any, PORT);

//Set port to listen to
myNewUDP.newUDPClient.Client.Bind(newBindEP);                                    

当我第一次调用弹出窗口时,它会正确连接到设备。但是,在随后的调用过程中,它会抛出一个异常“每个套接字地址只允许使用一次”。我该如何解决这个问题?有没有办法关闭IP和端口绑定?

【问题讨论】:

    标签: c#


    【解决方案1】:

    正在连接 意味着连接到其他端点。在这里你是绑定,这意味着你为自己保留协议/端口/IP。移除套接字上的绑定调用Close()

    您还使用UdpClient 有点奇怪,因为您直接在底层套接字上调用Bind()。你可以只使用一个普通的Socket。或者您可以使用实际的UdpClient 来处理所有事情。

    【讨论】:

    • 当我第二次调用弹出窗口时,消息没有被传输。只需关闭 UdpClient 即可解决此问题?
    • 我尝试在 form2 关闭事件期间执行 myNewUDP.newUDPClient.Close(),但仍然产生相同的错误。
    • @Abin 那么myNewUDP.newUDPClient.Client.Close() 呢,因为你是在直接戳底层套接字?
    • 当我这样做时,我收到另一个关于资源不可用的回调的异常。 NewUdpState MynewUDP = (NewUdpState)ar.AsyncState; //获取 udp msg ReceiveString = Encoding.ASCII.GetString(MynewUDP.newUDPClient.EndReceive (ar, ref MynewUDP.newEP));
    猜你喜欢
    • 2011-08-30
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多