void InitListenSocket() { Debug.LogError("InitListenSocket " + random.Next()); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), ClientApp.Instance.testPort); socket.Bind(ip); socket.Listen(1); //msgReader.Reset(); msgReader = new ServerMsgReader(); msgReader.msgHandle = handleMsg; }
//Connection Lost Then Restart New Accept public void run() { InitListenSocket(); Debug.LogError("Start Demo Server"); byte[] buffer = new byte[1024]; while (!DemoServer.demoServer.stop) { Debug.LogError("Start Accept Socket"); Socket connect = null; msgReader = new ServerMsgReader(); msgReader.msgHandle = handleMsg; while (!DemoServer.demoServer.stop) { try { Debug.LogError("Server Start Accept " + random.Next()); connect = socket.Accept(); break; } catch (Exception ex) { Debug.LogError("ServerSocket AcceptError " + ex); //socket.Shutdown(SocketShutdown.Both); try { socket.Close(); } catch (Exception ex1) { Debug.LogError("Server Socket Close Error " + ex1); } Thread.Sleep(1); if (!DemoServer.demoServer.stop) { InitListenSocket(); } } } var con = new MyCon(connect); if (!DemoServer.demoServer.stop) { if (currentCon != null) { lock (currentCon.msgBuffer) { currentCon.msgBuffer.Clear(); } } currentCon = con; var sendThread = new Thread(new ThreadStart(delegate() { SendThread(con); })); sendThread.Start(); } while (!con.isClose && !DemoServer.demoServer.stop) { int num = 0; try { num = connect.Receive(buffer); } catch (SocketException ex) { if (ex.SocketErrorCode == SocketError.WouldBlock || ex.SocketErrorCode == SocketError.IOPending || ex.SocketErrorCode == SocketError.NoBufferSpaceAvailable) { Debug.LogError("ReceiveSocket Error " + ex.SocketErrorCode); Thread.Sleep(100); } else { Debug.LogError("Critical Server ReceiveError " + ex.SocketErrorCode); con.Close(); break; } } if (num > 0) { msgReader.process(buffer, (uint)num); } else { Debug.LogError("Receive Buffer Length " + num); con.isConnected = false; con.Close(); currentCon = null; } } Debug.LogError("Socket Connect Stop"); } Debug.LogError("DemoServer Stop"); socket.Close(); }