public void WaitForData2(Socket soc, int clientNumber) { SocketPacket2 theSocPkt = new SocketPacket2(soc, clientNumber); try { if (pfnWorkerCallBack == null) { pfnWorkerCallBack = new AsyncCallback(OnDataReceived2); } soc.BeginReceive(theSocPkt.dataBuffer, 0, theSocPkt.dataBuffer.Length, SocketFlags.None, pfnWorkerCallBack, theSocPkt); } catch (SocketException se) { if (se.ErrorCode == 10053) { string msg = theSocPkt.string_RemoteEndPoint.ToString() + " Disconnected"; AppendToRichEditControl(msg); m_workerSocketList[theSocPkt.m_clientNumber - 1] = null; UpdateClientListControl(); } else { MessageBox.Show(se.Message); } } }
public void OnDataReceived2(IAsyncResult asyn) { SocketPacket2 socketData = (SocketPacket2)asyn.AsyncState; try { int iRx = socketData.m_currentSocket.EndReceive(asyn); char[] chars = new char[iRx + 1]; System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder(); int charLen = d.GetChars(socketData.dataBuffer, 0, iRx, chars, 0); System.String szData = new System.String(chars); AppendToRichEditControl(socketData.string_RemoteEndPoint.ToString() + ":" + szData); richTextBox4.AppendText(socketData.string_RemoteEndPoint.ToString() + ":" + szData + "\r\n"); Socket workerSocket = socketData.m_currentSocket; byte[] byData = Encoding.ASCII.GetBytes(szData); //workerSocket.Send(byData); WaitForData2(socketData.m_currentSocket, socketData.m_clientNumber); } catch (ObjectDisposedException) { System.Diagnostics.Debugger.Log(0, "1", "\nOnDataReceived: Socket has been closed\n"); } catch (SocketException se) { if (se.ErrorCode == 10054) { string msg = socketData.string_RemoteEndPoint.ToString() + " Disconnected"; AppendToRichEditControl(msg); m_workerSocketList[socketData.m_clientNumber - 1] = null; UpdateClientListControl(); } else { MessageBox.Show(se.Message); } } }