using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Net; using System.Threading; using System.Collections; namespace demo.ClassHelper.NetOperate { class TcpServerHelper { public static Dictionary dicConnectedClient = new Dictionary();//存储监听到的客户端 public static Thread threadWatch = null;//负责监听客户端的线程 public ManualResetEvent allDone = new ManualResetEvent(false); public static Socket CreateTcpServer() { return new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } public static bool BindEndPoint(Socket server, IPEndPoint endPoint) { bool ret = false; try { if (!server.IsBound) { server.Bind(endPoint); ret = true; } } catch { } return ret; } public static bool BindEndPoint(Socket server, string ip, int port) { bool ret = false; try { IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(ip), port); if (!server.IsBound) { server.Bind(endPoint); ret = true; } } catch { } return ret; } public static void Disconnect(Socket server) { if (server != null) { server.Shutdown(SocketShutdown.Both); server.Disconnect(true); } } public static void Close(Socket server) { if (server != null) { server.Shutdown(SocketShutdown.Both); server.Close(); } } public static bool SetListenQueueLength(Socket server, int backlog) { bool ret = false; try { server.Listen(backlog); ret = true; } catch { } return ret; } public static void WatchConnecting(Socket server, Dictionary dicConnectedClient) { Socket connecClient = null; while (true) { try { connecClient = server.Accept(); string connectEndPoint = connecClient.RemoteEndPoint.ToString(); dicConnectedClient.Add(connectEndPoint, connecClient); } catch (System.Exception ex) { break; throw new Exception(ex.Message); } } } public static void Recv(object socketclientpara) { Socket socketClient = socketclientpara as Socket; while (true) { byte[] arrServerRecMsg = new byte[1024 * 1024]; try { int length = socketClient.Receive(arrServerRecMsg); string strSRecMsg = Encoding.UTF8.GetString(arrServerRecMsg, 0, length); //WriteLogToListView(string.Format("客户端{0} {1}", socketClient.RemoteEndPoint, strSRecMsg)); //socketClient.Send(Encoding.UTF8.GetBytes("测试server 是否可以发送数据给client ")); } catch { dicConnectedClient.Remove(socketClient.RemoteEndPoint.ToString()); //WriteLogToListView(string.Format("客户端{0} 已经中断", socketClient.RemoteEndPoint)); socketClient.Close(); break; } } } public static bool SendMsgToPointClient(Socket client, string msg) { bool ret = false; try { if (client!=null&&msg!=null) { byte[] bytes = Encoding.Default.GetBytes(msg); client.Send(bytes); ret = true; } } catch { } return ret; } public static bool SendMsgToPointClient(Socket client, byte[] msg) { bool ret = false; try { if (client != null && msg != null) { client.Send(msg); ret = true; } } catch { } return ret; } public static bool RecvMsgFromClient(Socket server, ref string remoteEndPoint, ref string msg, int timeOut = 0) { bool ret = false; try { server.ReceiveTimeout = timeOut; byte[] bytes = null; int len = server.Available; if (len>0) { bytes = new byte[len]; int recvLen = server.Receive(bytes); if (recvLen == len) { ret = true; msg = Encoding.UTF8.GetString(bytes, 0, recvLen); } remoteEndPoint = server.RemoteEndPoint.ToString(); } } catch { } return ret; } public static bool SendMsgToPoinrClient(Socket server, string ip, int port, byte[] msg, int timeOut = 0) { bool ret = false; try { server.SendTimeout = timeOut; EndPoint endPoint = new IPEndPoint(IPAddress.Parse(ip), port); int len = server.SendTo(msg, endPoint); if (len == msg.Length) { ret = true; } } catch { } return ret; } public static bool SendMsgToPoinrClient(Socket server, string ip, int port, string msg, int timeOut = 0) { bool ret = false; try { byte[] byteMsg = new byte[msg.Length]; server.SendTimeout = timeOut; EndPoint endPoint = new IPEndPoint(IPAddress.Parse(ip), port); int len = server.SendTo(byteMsg, endPoint); if (len == msg.Length) { ret = true; } } catch { } return ret; } } }