C# 控制台自动将服务器重新连接到客户端
本文关键字:重新连接 客户端 服务器 控制台 | 更新日期: 2023-09-27 18:32:56
你好,任何人都可以帮我解决这个问题,我正在尝试创建客户端和服务器应用程序反向连接。当我尝试打开客户端和服务器时,我没有遇到任何问题,反之亦然。场景是我执行客户端和服务器,但是当我关闭服务器并再次重新打开时,它不接受任何连接都丢失了。
这是代码:
客户端代码:
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();
}
}
}
}
}
您应该检查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 线程中运行此循环,因为它具有各种阻塞潜力。也仅在要与服务器交互时才尝试连接。但是现在这段代码应该适合你。