/// <summary> /// 启动 TCP 服务 /// </summary> public void StartTcpServer(Model.TcpServerModel serverModel) { ServerModel = serverModel; // 解析 端口 int port = 0; try { port = int.Parse(serverModel.BindedPort); } catch (Exception) { serverModel.AddServerState("端口转换错误,关闭服务器"); return; } try { // 开始建立服务器 IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Any, port); ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ServerSocket.Bind(serverEndPoint); ServerSocket.Listen(5); serverModel.AddServerState("建立服务器 成功,等待 TCP 客户端连接"); } catch (Exception) { serverModel.AddServerState("建立服务器 失败,可能是因为端口被占用"); return; } while (true) { try { Client = ServerSocket.Accept(); } catch { serverModel.AddServerState("服务器 等待链接异常,尝试关闭服务器"); return; } IPEndPoint clientEndPoint = (IPEndPoint)Client.RemoteEndPoint; serverModel.AddServerState("连接 到 客户端"); serverModel.RemoteEndPoint = string.Format("{0}:{1}", clientEndPoint.Address, clientEndPoint.Port); int rece; string receiveString; byte[] data = new byte[1024]; while (true) { try { rece = Client.Receive(data); } catch (SocketException) { serverModel.AddServerState("接收数据出错,尝试关闭服务器"); if (Client != null && Client.Connected) { Client?.Shutdown(SocketShutdown.Both); Client?.Close(); } if (ServerSocket != null && ServerSocket.Connected) { ServerSocket?.Close(); } return; } if (rece == 0) { serverModel.AddServerState("客户端 请求关闭,失去连接"); serverModel.AddServerState("服务器 等待 新TCP客户端"); break; } receiveString = Encoding.UTF8.GetString(data, 0, rece); serverModel.AddReceiveAndSendData("接收 -->> " + receiveString); } Client?.Shutdown(SocketShutdown.Both); Client?.Close(); Client?.Dispose(); } }
/// <summary> /// 构造函数 /// </summary> public TcpServerViewModel() { TcpServerModelInstance = new Model.TcpServerModel(); TcpServerInstance = new TcpPart.TcpServer(); }