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

SocketException: The requested address is not valid in the context

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

SocketException: The requested address is not valid in the context.

我试过了

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

sHostIpAddress 不是 127.0.0.1

我该如何解决?

这并不是 Unity 所特有的,而是 c# 的一般情况。

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

Use the Bind method if you need to use a specific local endpoint. You must call Bind before you can call the Listen method. You do not need to call Bind before using the Connect method unless you need to use a specific local endpoint.

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

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

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


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

var tcpClient = new TcpClient(sHostIpAddress, nPort);

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