以下是我的TCP服务器端代码。问题是当客户端计算机上的应用程序关闭时,服务器无法自动尝试每2秒重新连接一次,直到连接。我怎样才能做到这一点?
我的想法是在连接到客户端之后,服务器创建一个状态线程,每30秒向该客户端发送一个字节,如果失败--->终止连接并重试再次连接。我不确定它是否会起作用。
public static TcpClient client = new TcpClient();
public static int port = 6446;
public static string connectTo = "192.168.0.11";
public static NetworkStream dataStream;
static void Main(string[] args)
{
int retry = 0;
TryingConnect:
try
{
do
{
if (retry == 10)
{
retry = 0;
Console.Clear();
}
cout("Connecting...");
IPAddress ipAddress = IPAddress.Parse(connectTo);
client.Connect(ipAddress, port);
} while (client.Connected != true);
cout("Connected!");
dataStream = client.GetStream();
}
catch (Exception ex)
{
// Debug: MessageBox.Show(ex.ToString());
retry++;
Thread.Sleep(2000);
goto TryingConnect;
}
}
答案 0 :(得分:1)
服务器是侦听来自客户端的连接的通信方。客户端是启动连接的客户端。如果您希望服务器重新创建与客户端的丢失连接,则服务器在这种情况下实际上是客户端,因为它启动了新连接。
除了客户端和服务器这两个词的含义:如果对等C喜欢S连接到它,C必须先监听并接受传入的连接,这不是普通客户的情况。即使C会这样做,C的网络实际上也必须可由S到达以创建新连接。通常情况并非如此,即如果C位于某个本地网络(家庭中的典型设置,工作且通常在移动电话上),则S无法到达C而C本身可能达到S.因此S无法建立连接回到C.