【问题标题】:C# try to connect to the serverC#尝试连接服务器
【发布时间】:2017-08-17 17:02:27
【问题描述】:

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

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;
}

【问题讨论】:

  • 不要发布您的代码图片。将实际代码直接包含在您的问题中
  • 在第二个循环的 if 语句中设置 a = 2; 供初学者使用。
  • 还有,发生了什么,什么错误,你想要什么结果?
  • 我将 "a" 设置为 1 以进入 while。如果它进入 IF 它会执行该方法并说“a”是 2,因此 n 重新进入 while

标签: c# server client try-catch


【解决方案1】:

根据您几乎正确的代码。我相信“连接”扩展方法应该更新客户端中的值。如果它按照我的方式进行,那就是引入一个返回布尔值的单独方法,这将有助于简化代码。例如:

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
{
// ...
}

【讨论】:

    【解决方案2】:

    如果您不了解错误或所需功能的更多信息,我可以告诉您,如果您点击第二个循环,您将调用 connectRead(); 两次。要解决此问题,请将您的第二个循环替换为:

    while (!cliente.Connected)
    {
        int milliseconds = 2000;
        Thread.Sleep(milliseconds);
        cliente.Connect(IP_End);
    
        if (cliente.Connected)
        {
            connectRead();
            a = 2;
        }
    }
    

    编辑: 我还删除了MessageBox,因为这似乎没有必要,并且会暂停程序,直到您在MessageBox 上点击Ok

    编辑 2:

    Question on actively refused connections

    Question on determination of open port

    【讨论】:

    • 错误是:无法建立连接,因为目标计算机主动拒绝它们 192.168.254.28:100
    • if (cliente.Connected) { connectRead(); a = 2; // 在这种情况下什么都不做 }
    • 那是网络问题,你可能需要检查防火墙设置,检查端口100是否打开,并确保192.168.254.28可以从PC访问,(ping它)跨度>
    • actively refused 让我觉得防火墙或端口已关闭。
    猜你喜欢
    • 2020-04-25
    • 2021-03-08
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多