我制作了一个带自动连接的服务器 - 客户端程序。 但该程序仅在我首次启动服务器应用程序时才有效,因为客户端需要连接。 如果服务器已经创建,我的目标是让客户端检查延迟2秒。 我做了一个试验和错误循环的声明
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;
}
答案 0 :(得分:0)
如果您不了解更多有关错误或所需功能的信息,我可以告诉您,如果您点击第二个循环,则会拨打connectRead();
两次。要解决此问题,请使用以下命令替换第二个循环:
while (!cliente.Connected)
{
int milliseconds = 2000;
Thread.Sleep(milliseconds);
cliente.Connect(IP_End);
if (cliente.Connected)
{
connectRead();
a = 2;
}
}
修改强>
我还拿出了MessageBox
,因为这似乎是不必要的,会暂停程序直到您点击Ok
上的MessageBox
。
编辑2:
答案 1 :(得分:0)
基于代码,你几乎把它弄好了。我相信“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
{
// ...
}