当前位置: 代码迷 >> C# >> C# Socket异步连接断开重连有关问题
  详细解决方案

C# Socket异步连接断开重连有关问题

热度:811   发布时间:2016-05-05 05:35:00.0
C# Socket异步连接断开重连问题

 class ScreenshotsThread 
    {
        private String IpAddress = "";
        private string IPport = "";
        private String tid = "";
        byte[] buffer = new byte[1024];
        Socket socket;
       //线程启动方法
        public override void run()
        {
            try
            { 
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(IpAddress, int.Parse(IPport));
                socket.Receive(buffer);
            }
            catch (Exception ex)
            {
                throw new Exception("读取截屏据数据存在错误!");
            }
            socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);
        }
      
      //异步获取方法 
       private void ReceiveMessage(IAsyncResult ar)
        {
            try
            {
                var socket = ar.AsyncState as Socket;
                var length = socket.EndReceive(ar);
                byte[] reallData = new byte[length];
                Array.Copy(buffer, reallData, length);
                string str = System.Text.Encoding.UTF8.GetString(reallData);
                //相关处理代码
                Thread.Sleep(10);
            }
            catch (Exception ex)
            {
                throw new Exception("读取截屏据数据存在错误!");
            }
            finally
            {
                socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);
            }
        }
}

------解决思路----------------------
服务器的代码要求是非常严苛,特别是在并发量大的情况下,象你说的服务器卡死了这样的,就是比较严重的了。
多写单元测试多做负载测试。vs下面的负载测试免费的只到250个。以上需要另外付费够买,具说价格是天文数字。而且一次最高就是一千。
类似楼主说的这个情况。我现在处理方式是直接关闭服务器端,由保护进程再另行开启。
不过至今还没遇到过这样的情况。我们的两个服务器端(一个 android手机用的一个PC软件用的)现在已经7*24完整运几了几个月。到现在还比较稳定。 
------解决思路----------------------
我们反正写了个服务开机自启
  相关解决方案