【问题标题】:The requested address is not valid in its context in TCP socket communication请求的地址在 TCP 套接字通信的上下文中无效
【发布时间】:2017-04-16 10:36:23
【问题描述】:

我想在同一台 PC 上运行的两个应用程序之间实现套接字通信。其中之一是 Unity 应用程序(服务器)。所以我写了以下内容:

public class Main : MonoBehaviour {

    // Use this for initialization
    void Start () {

        // Set the TcpListener on port 13000.
        Int32 port = 8800;
        IPAddress localAddr = IPAddress.Parse("192.168.1.1");

        // TcpListener server = new TcpListener(port);
        TcpListener server = new TcpListener(localAddr,port);
        Socket socketForClient;

        try
        {
            server.Start();
            socketForClient = server.AcceptSocket();
            if (socketForClient.Connected)
            {
                print("connected");
            }
            else
            {
                print("not connected");
            }
        }
        catch (Exception e)
        {
            print(e.Message);
        }

    }

    // Update is called once per frame
    void Update () {

    }
}

当我开始游戏时,我得到以下信息:The requested address is not valid in its context. 异常。有什么帮助吗?如果我希望服务器客户端在同一台 PC 上运行,我应该使用哪个 IP/端口?

【问题讨论】:

    标签: c# sockets tcp


    【解决方案1】:

    您可以在0.0.0.0 上收听所有接口,包括环回和外部接口。

    但如果您知道它是同一台机器,请使用127.0.0.1,因为它总是指向自身。

    【讨论】:

      【解决方案2】:

      根据IPAddress Fields,您可以将IPAddress.Loopback 用于本地环回接口。如果你想在任何接口上建立连接,你可以使用IPAddress.Any

      在您的解决方案中,如果本地 IP 地址发生变化并且不再是 192.168.1.1,您可能会遇到问题 - 因此您应该使用框架提供的一种可能性(如 Loopback 或 Any)。

      【讨论】:

      • 我把它改成了IPAddress.Any,但是当我尝试运行它时却卡住了。
      • 我猜它“冻结”在server.AcceptSocket(),对吧?那是因为对server.AcceptSocket() 的调用被阻塞了。只要没有建立连接,它就会阻塞。顺便说一句:在我看来,您应该启动一个无休止的后台线程,直到有人或某物尝试连接,然后为此连接启动另一个工作线程。
      • 所以,我想如果我创建客户端并假设连接将建立并启动它,它将不再被冻结。对吗?
      猜你喜欢
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 2022-01-02
      • 2022-01-07
      • 2020-12-25
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      相关资源
      最近更新 更多