Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#控制台自动将服务器重新连接到客户端_C#_C# 4.0_Tcp_Tcpclient_Tcplistener - Fatal编程技术网

C#控制台自动将服务器重新连接到客户端

C#控制台自动将服务器重新连接到客户端,c#,c#-4.0,tcp,tcpclient,tcplistener,C#,C# 4.0,Tcp,Tcpclient,Tcplistener,您好,有人能帮我一下吗?我正在尝试创建客户端和服务器应用程序反向连接。当我试图打开客户端和服务器时,我没有遇到任何问题,反之亦然。这个场景是我执行客户端和服务器,但是当我关闭服务器并再次打开时,它不接受任何连接,这两个连接都丢失了 代码如下: 客户端代码: namespace client1 { class Program { public static bool isConnected { get; set; } public static NetworkStream

您好,有人能帮我一下吗?我正在尝试创建客户端和服务器应用程序反向连接。当我试图打开客户端和服务器时,我没有遇到任何问题,反之亦然。这个场景是我执行客户端和服务器,但是当我关闭服务器并再次打开时,它不接受任何连接,这两个连接都丢失了

代码如下:

客户端代码:

namespace client1
{
  class Program
   {
    public static bool isConnected { get; set; }
    public static NetworkStream Writer { get; set; }
    public static NetworkStream Reciever { get; set; }

    static void Main(string[] args)
    {
        Connect_To_Server();
    }

    public static void Connect_To_Server()
    {
        TcpClient Connecting = new TcpClient();
        string IP = "178.121.1.2";
        while (isConnected == false)
        {
            try
            {
                Connecting.Connect(IP, 2000);
                isConnected = true;

                Writer = Connecting.GetStream();
                Reciever = Connecting.GetStream();
                Console.WriteLine("Connected: " + IP);
            }
            catch
            {
                Console.WriteLine("Error Connection... .");
                Console.Clear();
            }
        }
        Console.ReadKey();
    }

 }
}
服务器代码:

 namespace server1
 {
  class Program
   {

    public static bool isConnected { get; set; }
    public static NetworkStream Writer { get; set; }

    static void Main(string[] args)
    {
        Listen_To_Client();
    }

    public static void Listen_To_Client()
    {
        TcpListener Listen = new TcpListener(2000);

        while (true)
        {
            Listen.Start();

            if (Listen.Pending())
            {

                TcpClient Connect = Listen.AcceptTcpClient();
                isConnected = true;
                Console.WriteLine("Connection Accepted");
                Writer = Connect.GetStream();
                Console.ReadKey();
            }

        }

      }

     }
    }

与其使用局部变量
isConnected
,不如检查
Connecting.Connected
。 在您的情况下,连接一次并将
isConnected
设置为
true
。现在,您的
while
循环条件以
false
结束,并且您从未尝试重新连接客户端

编辑:


请记住,您不应该在GUI线程中运行此循环,因为它具有各种阻塞潜力。此外,仅当您希望与服务器交互时才尝试连接。但现在这段代码应该适合您。

我不明白,您的客户端只调用一次,所以您希望如何执行两次,我是否遗漏了什么?很抱歉被误解了。我只运行一次客户端,但对于服务器,我想运行多次。如果我关闭服务器一次,然后重新打开,我的客户端和服务器将不再通信。已经好几天没想到了,还是运气不好。我是套接字编程新手。这里的问题是你只需连接一次服务器。然后关闭连接。之后,您需要建立到服务器的新连接(即再次调用
Connect\u to\u server()
)。请在我的代码中输入如何建立新连接的示例代码。非常感谢。我不知道如何判断我只是在使用while循环和。Connected?在(Connecting.Connected==false){…}@user2528270时仍然无法工作,我在答案中添加了一些代码。希望有帮助:)非常感谢你的核武器!工作完美!上帝保佑你。你能给我推荐一本书吗?这本书对我这个socket编程的初学者很有帮助?我是一名asp.net web开发人员,是一名新的套接字编程人员。我很高兴能够提供帮助。不幸的是,我没有一本书名可以推荐给你,但是网上应该有很多教程。
while (true)
{
    try
    {
        TcpClient client = new TcpClient(ip, port);
        if (client.Connected)
        {
            // do something
            client.close();
        }
    }
    catch (SocketException) { }

    Thread.Sleep(millisecs);
}