public void WaitForData(Socket soc, string clientNumber) { try { if (_pfnWorkerCallBack == null) { _pfnWorkerCallBack = OnDataReceived; } SocketPacket socketPacket = new SocketPacket(soc, clientNumber); soc.BeginReceive(socketPacket.DataBuffer, 0, socketPacket.DataBuffer.Length, SocketFlags.None, _pfnWorkerCallBack, socketPacket); } catch (SocketException ex) { Debugger.Log(0, "SocketException", "\n " + ex.Message + "\n"); _log.Error(String.Format("SocketException - code:{0} msg:{1} - {2}", ex.ErrorCode, ex.Message, ex.SocketErrorCode)); } }
public void OnDataReceived(IAsyncResult asyn) { SocketPacket socketPacket = (SocketPacket)asyn.AsyncState; try { int byteCount = socketPacket.CurrentSocket.EndReceive(asyn); char[] chars = new char[byteCount + 1]; Encoding.UTF8.GetDecoder().GetChars(socketPacket.DataBuffer, 0, byteCount, chars, 0); string str = new string(chars); UpdateServerLog(socketPacket.ClientNumber + ":" + str); byte[] bytes = Encoding.ASCII.GetBytes("Server Reply:" + str.ToUpper()); socketPacket.CurrentSocket.Send(bytes); WaitForData(socketPacket.CurrentSocket, socketPacket.ClientNumber); } catch (ObjectDisposedException ex) { Debugger.Log(0, "1", "\nOnDataReceived: Socket has been closed\n"); _log.Error(String.Format("ObjectDisposedException - name:{0} msg:{1}", ex.ObjectName, ex.Message)); } catch (SocketException ex) { if (ex.ErrorCode == 10054) { UpdateServerLog("Client " + socketPacket.ClientNumber + " Disconnected\n"); Socket soc; _workerSocketList.TryRemove(socketPacket.ClientNumber, out soc); } else { Debugger.Log(0, "SocketException", "\n " + ex.Message + "\n"); _log.Error(String.Format("SocketException - code:{0} msg:{1} - {2}", ex.ErrorCode, ex.Message, ex.SocketErrorCode)); } } }