using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; using SocketProgram; using System.Globalization; namespace TcpServerLib { public class TcpServer { private byte[] buffer = new byte[1024]; public static readonly int maxLinkNum = 10; public static int nowNum = 0; private static readonly string logPath = "../log/Server.log"; private int port; private IPEndPoint ipEndPoint; private Socket mServerSocket; private List mClientSockets; public TcpServer(int port) { this.port = port; this.mClientSockets = new List(); this.ipEndPoint = new IPEndPoint(IPAddress.Any, port); this.mServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); this.mServerSocket.Bind(this.ipEndPoint); } public void Listen() { while (nowNum <= maxLinkNum) { this.mServerSocket.Listen(0); Socket CliSocket = this.mServerSocket.Accept(); this.mClientSockets.Add(CliSocket); var mReveiveThread = new Thread(this.ReceiveClient); mReveiveThread.Start(CliSocket); ++nowNum; string str = "链接成功:now_link_num[" + nowNum + "]"; string ep = CliSocket.RemoteEndPoint.ToString(); SocketClass.WriteLog(logPath, SocketClass.GetNowTimeStr() + str); SocketClass.WriteLog(logPath, ep); } } private void ReceiveClient(object obj) { var mClientSocket = (Socket)obj; while (true) { try { int receiveLength = mClientSocket.Receive(buffer); string clientMessage = Encoding.UTF8.GetString(buffer, 0, receiveLength); //SocketClass.DealRecvMsg(logPath, clientMessage,true); string returnStr = "recv_success" + clientMessage; mClientSocket.Send(Encoding.UTF8.GetBytes(returnStr)); } catch (Exception e) { this.mClientSockets.Remove(mClientSocket); string estr = e.ToString(); SocketClass.WriteLog(logPath, SocketClass.GetNowTimeStr() + estr); mClientSocket.Shutdown(SocketShutdown.Both); mClientSocket.Close(); --nowNum; string str = "链接断开:now_link_num[" + nowNum + "]"; SocketClass.WriteLog(logPath, SocketClass.GetNowTimeStr() + str); break; } } } } }