【问题标题】:C# Console Auto Reconnect Server to ClientC# 控制台自动重新连接服务器到客户端
【发布时间】:2013-09-27 19:45:44
【问题描述】:

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

代码如下:

客户代码:

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

        }

      }

     }
    }

【问题讨论】:

  • 我不明白,你的客户端调用一次,那你怎么期望执行两次,我错过了什么吗?
  • 很抱歉造成误解。我只运行一次客户端,但对于服务器,我想多次运行它。如果我关闭我的服务器一次然后重新打开我的客户端和服务器不再通信。已经好几天了,仍然没有运气。我是套接字编程的新手。
  • 这里的问题是你连接到服务器一次。然后关闭该连接。之后您需要与服务器建立新连接(即再次调用Connect_To_Server())。
  • 先生任何示例代码如何在我的代码中建立新连接。非常感谢。

标签: c# c#-4.0 tcp tcpclient tcplistener


【解决方案1】:

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

编辑:

while (true)
{
    try
    {
        TcpClient client = new TcpClient(ip, port);
        if (client.Connected)
        {
            // do something
            client.close();
        }
    }
    catch (SocketException) { }

    Thread.Sleep(millisecs);
}

请记住,您不应在 GUI 线程中运行此循环,因为它具有各种阻塞的可能性。如果您想与服务器交互,也只能尝试连接。但现在这段代码应该适合你。

【讨论】:

  • 我不知道如何弄清楚我只是在使用 while 循环和 .Connected?在 (Connecting.Connected == false) { .... 时仍然无法正常工作}
  • @user2528270 我在答案中加入了一些代码。希望有帮助:)
  • 非常感谢您!工作完美!上帝祝福你。作为套接字编程的初学者,你能推荐一本书吗?我是一名 asp.net 网络开发人员,并且是套接字编程的新手。
  • 我很高兴能够提供帮助。不幸的是,我没有可以向您推荐的书名,但网络上应该有很多教程。
猜你喜欢
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多