参考网上写的,希望大家多提意见 public class TCPSvr { TcpListener listener; Socket sorket; public Hashtable ht = new Hashtable(); /// <summary> /// 接收到客户端连接时发生 /// </summary> public event EventHandler<TCPEventArgs> OnConnected; /// <summary> /// 接收到客户端消息时发生 /// </summary> public event EventHandler<TCPEventArgs> OnReceivedMessage; public TCPSvr(int port) { listener = new TcpListener(port); } public void Start() { try { listener.Start(); listener.BeginAcceptTcpClient(new AsyncCallback((s) => listenercallback(s)), null); } catch (Exception ex) { throw new ArgumentException("异常", ex); } } public void Stop() { listener.Stop(); } public void SendMsg(string msg) { foreach (DictionaryEntry i in ht) { StreamWriter streamWriter = i.Value as StreamWriter; // StreamWriter streamWriter = new StreamWriter(nwstream); try { streamWriter.WriteLine(msg); streamWriter.Flush(); } catch(Exception ex) { ht.Remove(i); throw new ArgumentException(i.Key + "已断开连接", ex); } } } public void SendMsg(string ip, string msg) { StreamWriter streamWriter = ht[ip] as StreamWriter; // StreamWriter streamWriter = new StreamWriter(nwstream); streamWriter.WriteLine(msg); streamWriter.Flush(); } private void listenercallback(IAsyncResult arr) { AsyncResult ar = arr as AsyncResult; //if(!listener.Server.Connected) //{ // setReceiveText("连接已断开/r/n"); // return; //} TcpClient tcpclint = listener.EndAcceptTcpClient(arr); listener.BeginAcceptTcpClient(new AsyncCallback(listenercallback), null); NetworkStream nwstream = tcpclint.GetStream(); string clientIp = ((IPEndPoint)tcpclint.Client.RemoteEndPoint).Address.ToString(); if (ht.Contains(clientIp)) ht[clientIp] = new StreamWriter(tcpclint.GetStream()); else ht.Add(clientIp, new StreamWriter(tcpclint.GetStream())); // setReceiveText("[" + DateTime.Now + "] " + clientIp + "建立连接/r/n"); if (OnConnected != null) OnConnected(clientIp, new TCPEventArgs("",clientIp)); StreamReader sr = new StreamReader(nwstream); Func<string> stringHander = new Func<string>(sr.ReadLine); stringHander.BeginInvoke(new AsyncCallback(readlinecallback), tcpclint); } /// <summary> /// readline回调函数 /// </summary> /// <param name="arr"></param> private void readlinecallback(IAsyncResult arr) { try { AsyncResult ar = arr as AsyncResult; string str = (ar.AsyncDelegate as Func<string>).EndInvoke(arr); TcpClient clt = arr.AsyncState as TcpClient; string clientIp = ((IPEndPoint)clt.Client.RemoteEndPoint).Address.ToString(); StreamReader sr = new StreamReader(clt.GetStream()); if (str != null && OnReceivedMessage != null) OnReceivedMessage(clt,new TCPEventArgs(str,clientIp)); Func<string> stringHander = new Func<string>(sr.ReadLine); stringHander.BeginInvoke(new AsyncCallback(readlinecallback), arr.AsyncState); } catch { } } } public class TCPEventArgs : EventArgs { /// <summary> /// 客户端消息 /// </summary> public string RcvMessage { get; set; } /// <summary> /// 客户端IP /// </summary> public string ClientIp { get; set; } public TCPEventArgs(string message,string ip) { this.RcvMessage = message; this.ClientIp = ip; } } 调用 TCPSvr tcpSvr = new TCPSvr(Config.Port); tcpSvr.OnReceivedMessage += new EventHandler<TCPEventArgs>(tcpSvr_OnReceivedMessage); tcpSvr.Start(); void tcpSvr_OnReceivedMessage(object sender, TCPEventArgs e) { string rcv = e.RcvMessage; }