入门到卸载 2022-11-29 17:49 采纳率: 33.3%
浏览 24

C#socket断线重连

######C#socket客户端 断线重连接到无服务有问题。

#这是代码捏 第一次可以正常连接 但是我关闭掉服务器之后,客户端不动他。等10秒左右在打开服务器的监听 ,服务器就会一直接受前面服务器在关闭状态下的ip。基本上是卡死了。

img

img


#这是IP和端口 我没分开显示。 有无大神求请教!!!!

       private static bool IsConnet = false;
        private static string ip = "127.0.0.1";
        private static bool start = true;


 private void timer1_Tick(object sender, EventArgs e)
        {
            if (start)
            {
                Connet(ip, 502);
            }
       }


 public void Connet(string Iptxt, int Port)
        {
            start = false;
            client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            Thread thread = new Thread(() =>
            {
                while (!IsConnet)
                {
                    try
                    {
                        client.Connect(IPAddress.Parse(Iptxt), Port);
                        IsConnet = true;
                        break;
                    }
                    catch
                    {
                        client.Close();
                        client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        Thread.Sleep(1000);
                    }
                }
                Thread thread2 = new Thread(new ParameterizedThreadStart(ClientReceiveData));
                thread2.IsBackground = true;
                thread2.Start(client);
            });
            thread.IsBackground = true;
            thread.Start();
        }




 public void ClientReceiveData(object socket)
        {
            var ProxSocket = socket as Socket;
            byte[] data = new byte[1024 * 1024];
            while (IsConnet)
            {
                int len=0;
                try
                {
                    len = ProxSocket.Receive(data, 0, data.Length, SocketFlags.None);
                    MessageBox.Show(Encoding.UTF8.GetString(data, 0, len));
                }
                catch (Exception)
                {
                    IsConnet = false;
                    //ProxSocket.Shutdown(SocketShutdown.Both);//中止传输
                    ProxSocket.Close();//关闭
                    Connet(ip, 502);//重新尝试去连接
                    IsConnet = true;
                }
                if (len <= 0)
                {
                    IsConnet = false;
                    //   ProxSocket.Shutdown(SocketShutdown.Both);
                    ProxSocket.Close();
                    Connet(ip, 502);
                    IsConnet = true;
                }
            }
        }


  • 写回答

2条回答 默认 最新

  • 赵4老师 2022-11-29 20:28
    关注

    .Shutdown(SocketShutdown.Both);
    .Close();

    评论

报告相同问题?

问题事件

  • 创建了问题 11月29日

悬赏问题

  • ¥15 Windows下部署Asmjit
  • ¥15 请问双层规划模型的上下层目标函数不一致,是如何保证迭代收敛性的
  • ¥15 微信小程序 前端页面内容搜索
  • ¥15 cpu是如何判断当前指令已经执行完毕,然后去执行下条指令的
  • ¥15 安装visual studio2022时visualstudiosetup启动不了,闪退。问题代号0x0和0x1389
  • ¥30 java spring boot2.5.3版本websocket连不上
  • ¥15 angular js调外部链接查看pdf
  • ¥15 openFOAM DPMFoam
  • ¥15 将查询到的值,赋值到table指定行中
  • ¥50 docker容器内部启动shell脚本多命令