当前位置:编程学习 > C#/ASP.NET >>

C# System.Net.Sockets.SocketException 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败

我的C# udp通信协议有时候运行正常,有时候出现问题,不知道是什么情况,具体代码如下:

  private static void RecieveData()
        {
            byte[] CmdStart_02 = new byte[8] { 0x12, 0x34, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 };
            byte[] CmdSetBias = new byte[8] { 0x12, 0x34, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00 };

            byte[] data = new byte[1024];
           // string input, stringData;
            //构建TCP 服务器
            Console.WriteLine("This is a Client, host name is {0}", Dns.GetHostName());
            //设置服务IP,设置TCP端口号
            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 49152);
            //定义网络类型,数据连接类型和网络协议UDP
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            server.SendTo(CmdStart_02, CmdStart_02.Length, SocketFlags.None, ipep);
            server.SendTo(CmdSetBias, CmdSetBias.Length, SocketFlags.None, ipep);

            IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
            try
            {
                server.Connect(sender);
            }
            catch (System.Exception e)
            {
                Console.WriteLine("unable to connect the server");
                Console.WriteLine(e.ToString());
                return;
               
            }
            EndPoint Remote = (EndPoint)sender;
            Console.WriteLine("Message received from {0}: ", Remote.ToString());
            data = new byte[1024];
          
           server.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,1000);
           server.Blocking = true;
            int recv = 0;
            try 
            {
                recv = server.ReceiveFrom(data, ref Remote);
                Console.WriteLine(Remote.ToString());
                }
            catch (System.Exception e)
            {
                Console.WriteLine(e);
                Console.WriteLine(e.ToString());
            }
            Console.WriteLine("Message received from {0}: ", Remote.ToString());
            Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

            while (true)
            {
                data = new byte[1024];
               //  int temp = 0, temp1 = 0;
                int  CountZ;
                try
                {
                    recv = server.ReceiveFrom(data, ref Remote);
                   
                }
                catch (System.Exception e)
                {
                    
                    Console.WriteLine(e.ToString());
                }
                CountZ = data[20] * 16777216 + data[21] * 65535 + data[22] * 256 + data[23];
                prg1.globalCountZ1 = CountZ;
                //输出实时测量到的力传感器数值
                double Zforc;
                Zforc = prg1.globalCountZ1 / 1000000;
               if((count%2000)==0)
                Console.WriteLine(Zforc); 
                count++;
            }
           // Console.WriteLine("Stopping Client.");
            server.Close();

        }

  提示的异常为:System.Net.Sockets.SocketException 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。可能问题出在 recv = server.ReceiveFrom(data, ref Remote);上面,如果不出现问题Remote会显示正常的连接IPEndPoint,如果出现问题,Remote会为空。
    恳求大神指点!!!!!!!
--------------------编程问答-------------------- 服务器忙,请稍后再拨...
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,