恭喜,你发布的帖子
发布于 2021-09-27 19:53:16
14楼
继续更新掉线重连接问题 。
1 .服务器PLC端不掉线 , C#端掉线, 这个能直接再次连接上, 这里不处理。
2. 服务器PLC端掉线, C#端不掉线。下面讨论一下这个。
首先 在C#里创建线程,但最大线程数是1个。
private static int a = 0;
static void Main(string[] args)
{
//设定服务器IP地址
while (true)
{
if (a <1)
{
Thread mythread = new Thread(clinetstart);
mythread.Start();
a =1;
}
}
}
其次 ,在这个线程里, 创建socket ,连接到服务器请求, 读数据。 注意有异常时,a=0 ,关闭socket和线程。 这样a=0 又会重新创建一个线程。
static void clinetstart( )
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
//clientSocket.BeginConnect(ip, 8885, null, null);
clientSocket.Connect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口
Console.WriteLine("连接服务器成功");
}
catch
{
Console.WriteLine("连接服务器失败,请按回车键退出!");
}
//通过clientSocket接收数据
while (true)
{
try
{
Thread.Sleep(500);
if (!clientSocket.Connected)
{
//clientSocket.BeginConnect(ip, 8885, null, null);
clientSocket.Connect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口
}
int receiveLength = clientSocket.Receive(result);
//Encoding.ASCII.GetString(result, 0, receiveLength);
Console.WriteLine("接收服务器消息:{0},result[0]{1} ,result[65535]{2} 字节长度{3}", DateTime.Now, result[0], result[65535], receiveLength);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(clientSocket);
//clientSocket.Shutdown(SocketShutdown.Both);
a = 0;
clientSocket.Close();
Thread.CurrentThread.Abort();
}
}
}
如果有问题后面会完善, 上面是初步。
远程主机强迫关闭了现有的一个连接 , 这个就是我把服务器关闭了。
由于目标计算机积极拒绝,无法连接,是因为服务器不存在。
请填写推广理由:
分享
只看
楼主