C#尝试连接到服务器

时间:2017-03-24 16:43:14

标签: c# server client try-catch

我制作了一个带自动连接的服务器 - 客户端程序。 但该程序仅在我首次启动服务器应用程序时才有效,因为客户端需要连接。 如果服务器已经创建,我的目标是让客户端检查延迟2秒。 我做了一个试验和错误循环的声明

try
{
    int a = 1;
    while (a == 1)
    {
        cliente.Connect(IP_End);
        if (cliente.Connected)
        {
            connectRead();
            a = 2;
        }
        else
        {
            while (!cliente.Connected)
            {
                int milliseconds = 2000;
                Thread.Sleep(milliseconds);
                cliente.Connect(IP_End);
                MessageBox.Show(text);

                if (cliente.Connected)
                {
                    connectRead();
                }
            }
        }
    }
}
catch(SocketException se)
{
    MessageBox.Show(se.Message);
}
catch(Exception ex)
{
    MessageBox.Show(ex.Message);
}

错误是:

  

无法建立连接,因为目标计算机主动拒绝它们192.168.254.28:100

方法在这里:

private void connectRead()
{
    STW = new StreamWriter(cliente.GetStream());
    STR = new StreamReader(cliente.GetStream());
    STW.AutoFlush = true;

    backgroundWorker1.RunWorkerAsync();
    backgroundWorker1.WorkerSupportsCancellation = true;
}

2 个答案:

答案 0 :(得分:0)

如果您不了解更多有关错误或所需功能的信息,我可以告诉您,如果您点击第二个循环,则会拨打connectRead();两次。要解决此问题,请使用以下命令替换第二个循环:

while (!cliente.Connected)
{
    int milliseconds = 2000;
    Thread.Sleep(milliseconds);
    cliente.Connect(IP_End);

    if (cliente.Connected)
    {
        connectRead();
        a = 2;
    }
}

修改 我还拿出了MessageBox,因为这似乎是不必要的,会暂停程序直到您点击Ok上的MessageBox

编辑2:

Question on actively refused connections

Question on determination of open port

答案 1 :(得分:0)

基于代码,你几乎把它弄好了。我相信“Connect”扩展方法应该更新客户端中的值。如果它按照我的方式进行,那么将引入一个返回布尔值的单独方法,这将有助于简化代码。例如:

private bool ConnectClient(SomeClient clientToConnect, IPAddress ipToConnectTo, int delay)
{
    System.Threading.Thread.Sleep(delay);
    clientToConnect.Connect(ipToConnectTo);
    return clientToConnect.Connected;
}

try
{
    bool successfulConnection;

    while (!successfulConnection)
    {
        successfulConnection = ConnectClient(yourClient, "10.10.10.10", 2000);
    }
}
catch
{
// ...
}