//等待客户端连接 private void WaiForData(Socket worksocket, int clientNumber) { try { if (pfnWorkerCallBack == null) { //指定回调函数被调用,当被连接的客户端有任何写入活动时 pfnWorkerCallBack = new AsyncCallback(OnDataReveiced); } Socketpacket theSocket = new Socketpacket(worksocket, clientNumber); worksocket.BeginReceive(theSocket.databuffer, 0, theSocket.databuffer.Length, SocketFlags.None, pfnWorkerCallBack, theSocket); } catch (SocketException se) { MessageBox.Show(se.Message); } }
private void OnDataReveiced(IAsyncResult ar) { Socketpacket socketpacket = (Socketpacket)ar.AsyncState; string ip = ""; if (socketpacket != null && !flag) { ip = (socketpacket.currentsocket.RemoteEndPoint as IPEndPoint).Address.ToString(); } try { int irx = socketpacket.currentsocket.EndReceive(ar); char[] chars = new char[irx + 1]; Decoder d = UTF8Encoding.UTF8.GetDecoder(); int charlen = d.GetChars(socketpacket.databuffer, 0, irx, chars, 0); String sdata = new String(chars); sdata = sdata.Replace("\0", ""); string msg = "" + ip + ":"; AppendToRichEditControl(msg + "\r\n" + sdata); if (txt_ConnectNum.Text != "") { if (clientcount == int.Parse(txt_ConnectNum.Text)) { string msgTime = "Server End Socket Action Time:"; lock (this) { stopwatch.Stop(); //lblTime.Text = stopwatch.Elapsed.Seconds.ToString(); int itime = stopwatch.Elapsed.Milliseconds; //msgTime += stopwatch.Elapsed.Seconds.ToString()+"--"+itime.ToString(); msgTime += DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"); } writeLog(msgTime); writeLog(); lbl_Time.Text = msgTime; } } WaiForData(socketpacket.currentsocket, socketpacket.ClientNumber); } catch (ObjectDisposedException) { Debugger.Log(0, "1", "\nOnDataReceived: Socket has been closed\n"); } catch (SocketException se) { if (se.ErrorCode == 10054) { string msg = "Client:" + ip + " Disconnected" + "\n"; AppendToRichEditControl(msg); workSocketList[socketpacket.ClientNumber - 1] = null; //更新连接信息框 UpdateClientListControl(); } else { MessageBox.Show(se.Message); } } }