C#尝试连接到服务器

C#尝试连接到服务器,c#,server,client,try-catch,C#,Server,Client,Try Catch,我制作了一个自动连接的服务器客户端程序。 但是这个程序只有在我第一次启动服务器应用程序时才起作用,因为客户端需要连接。 我的目标是让客户端以2秒的延迟检查服务器是否已经创建。 我做了一个尝试和错误循环的while声明 try { int a = 1; while (a == 1) { cliente.Connect(IP_End); if (cliente.Connected) { connectRe

我制作了一个自动连接的服务器客户端程序。 但是这个程序只有在我第一次启动服务器应用程序时才起作用,因为客户端需要连接。 我的目标是让客户端以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;
}

在不了解更多错误或所需功能的情况下,我可以告诉您将调用
connectRead()两次。要修复此问题,请使用以下内容替换第二个循环:

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

    if (cliente.Connected)
    {
        connectRead();
        a = 2;
    }
}
编辑: 我还取出了
消息框
,因为这似乎是不必要的,并且会暂停程序,直到您点击
消息框上的
Ok

编辑2:


根据代码,您几乎完全正确。我认为“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
{
// ...
}

不要发布代码的图像。将实际代码直接包含在问题集中
a=2在第二个循环的
if
语句中。另外,发生了什么,发生了什么错误,需要什么结果?我将“a”设置为1以输入while。如果它输入If,它执行该方法并说“a”是2,因此n重新输入whilet错误是:无法建立连接,因为目标计算机主动拒绝它们192.168.254.28:100if(cliente.Connected){connectRead();a=2;//在这种情况下不做任何事情}然后出现网络问题,您可能需要检查防火墙设置,检查端口100是否打开,并确保可以从pc访问
192.168.254.28
,(
ping
it)
主动拒绝
使我认为防火墙或端口已关闭。