【问题标题】:Waiting for connection over network等待网络连接
【发布时间】:2014-04-24 14:51:17
【问题描述】:

我正在尝试创建一个程序,以便从网络上的另一台计算机发送和接收字符串。将只有一对独特的计算机通过该程序连接在一起。除了第一次连接外,大部分都已完成并且工作正常。只有在两台计算机同时打开程序的情况下,才能建立第一个连接。因为另一台计算机上的服务器不会运行,所以连接会被拒绝。这是代码:

public MultiplayerState2(Game1 game)
    {
        this.game = game;
        localIp = GetLocalIP();


        server = new TcpListener(IPAddress.Parse(localIp), localPort);


        server.Start();

        networkingThread = new Thread(getData);
        networkingThread.Start();

        clientThread = new Thread(connectClient);
        clientThread.Name = "Connect Client";
        clientThread.Start();
    }

    void connectClient()
    {
        while (client == null)
        {

            try
            {
                client = new TcpClient(remoteIp, remotePort);
                Console.WriteLine("Connected");
                clientThread.Abort();
            }
            catch
            {
                Console.WriteLine("Waiting for partner");

            }
        }

    }

这里,connectClient 应该等待来自计算机的连接。但是我得到的唯一输出是waiting for partner。这是等待连接的正确方法吗?如果是,为什么它不起作用?

【问题讨论】:

  • 抛出了什么异常?
  • @FodderZone 这是一个 SocketException,原因是客户端尝试连接时没有调用 TcpListener.Start
  • 请捕获 SocketException 并查找/传递 ErrorCode。 msdn.microsoft.com/en-us/library/windows/desktop/…
  • 一个建议:不推荐使用thread.Abort().......而不是clientThread.Abort();写'返回;'因为两者都会产生相同的效果..... 停止线程

标签: c# networking network-programming tcpclient tcplistener


【解决方案1】:

TcpClient 构造函数尝试连接到正在侦听指定端口的服务器。但是这个过程有 1 分钟的超时。如果1分钟内连接不成功,则关闭并抛出异常;因此你得到了例外。

这是尝试连接到服务器的唯一方法。您唯一可以添加的是使线程休眠(Thread.Sleep(n))一段时间,例如 10 秒左右(取决于您的上下文)。

【讨论】:

    猜你喜欢
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    相关资源
    最近更新 更多