回复:S7 1500 C# SOCKET编程案例实验(持续更新)

已锁定

flyfeky

  • 帖子

    154
  • 精华

    0
  • 被关注

    5

论坛等级:侠士

注册时间:2012-05-19

黄金 黄金 如何晋级?

发布于 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();

                    

                }


            }

        }


如果有问题后面会完善, 上面是初步。

远程主机强迫关闭了现有的一个连接 , 这个就是我把服务器关闭了。

由于目标计算机积极拒绝,无法连接,是因为服务器不存在。

bilibili 工控贵族
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32575条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。