【问题标题】:SocketException: The requested address is not valid in the contextSocketException:请求的地址在上下文​​中无效
【发布时间】:2022-01-07 18:34:40
【问题描述】:

我可以使用相同的 IP 地址与 socketTest 通信,但在 UNITY 中我收到一条错误消息

SocketException:请求的地址在上下文​​中无效。

我试过了

socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(new IPEndPoint(IPAddress.Parse(sHostIpAddress), nPort));

sHostIpAddress不是 127.0.0.1

我该如何解决?

【问题讨论】:

    标签: c# sockets unity3d socketexception


    【解决方案1】:

    这并不是真正特定于Unity,而是一般c#

    Socket.Bind 用于将套接字绑定到特定的 local 端点!例如,您想将套接字限制为特定的本地网络适配器/地址(默认情况下它将使用任何/全部)或特定的本地端口(默认情况下它将选择任何空闲的本地端口)

    如果您需要使用特定的本地端点,请使用Bind 方法。您必须先调用Bind,然后才能调用Listen 方法。 在使用Connect 方法之前不需要调用Bind,除非您需要使用特定的本地端点

    通常您将Bind 主要用于服务器端,用于侦听和等待传入连接或UDP 等无连接协议。

    您很可能只是想使用Socket.Connect 来建立与远程服务器的连接。

    当使用Connect 而不使用Bind 时,它会简单地选择它认为最适合到达给定主机地址的网络适配器/地址,并选择下一个可用的本地端口。


    但是,一般来说,我建议宁愿使用TcpClient,而不是“手动”编写和配置Socket(除非用例需要)。

    var tcpClient = new TcpClient(sHostIpAddress, nPort);
    

    此构造函数将自动启动连接尝试。 TcpClient 是一个 IDisposable,并在处理底层套接字、流等时清理它。它也(在我看来)更容易配置和发送和接收数据。

    【讨论】:

    • 感谢您的回复,感谢您的帮助我解决了它。 :)
    猜你喜欢
    • 2022-01-02
    • 2020-12-25
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多