有没有办法检查套接字连接是否可用?

问题描述 投票:0回答:1

我有以下代码:

class MyServer
{

    TcpListener myList;
    Socket socket;

    public MyServer(string ip)
    {
        this.myList = new TcpListener(ip, 12001);
        this.myList.Start();
        Thread t = new Thread(new ThreadStart(GetConnection));
        t.Start();
    }

    public void GetConnection()
    {
        try
        {
            socket = myList.AcceptSocket(); //(1)
        }
        catch
        {
            Console.WriteLine("Error");
        }
    }

    public void StopListening()
    {
        this.myList.Stop();
    }
}

而且效果很好:我启动服务器,如果我“后悔”,我会调用StopListening()(在建立连接之前!),因为我关闭了myList,所以(1)失败。

是否可以通过没有try {} catch {}的方式编写此代码-将GetConnection()重写为:

public void GetConnection()
{
    while ( myList is open && there is no connection)
    {
         //do nothing
    }
    if (myList is open)
    {
         this.socket = myList.AcceptConnection();
    }
}

或另一种方式?谢谢。

c# multithreading sockets tcplistener
1个回答
0
投票

您可以通过检查底层套接字是否绑定来重写GetConnection(),而无需使用try{}catch{}。>

public void GetConnection()
{
    if (myList.Server.IsBound)
    {
        socket = myList.AcceptSocket(); //(1)
    }
    else
    {
        Console.WriteLine("Error");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.