/* Describtion : Class for Tcp Network Connection * Company : Wuxi Xinje * Author : Somuns * DateTime : 2021/1/18 */ using System; using System.Diagnostics; using System.Net; using System.Net.Sockets; using System.Windows.Forms; namespace StuMgmLib.MyNameSpace { // 还有一种验证连接方式: Token public class TcpConn { public EndPoint Ep; private IPEndPoint ipp = null; private Socket socket = null; private Socket socketClient = null; private bool my_SocketExist = false; /// /// 判断服务器开关 /// public bool SocketExist { get { return my_SocketExist; } private set { my_SocketExist = value; } } public void GetIPAddress(ComboBox cb) { cb.Items.Clear(); foreach (IPAddress ipAddr in Dns.GetHostEntry(Dns.GetHostName()).AddressList) { if (ipAddr.AddressFamily.ToString() == "InterNetwork") { cb.Items.Add(ipAddr.ToString()); } } if (cb.FindString("127.0.0.1") == -1) cb.Items.Add("127.0.0.1"); } #region 开启服务器 public void OpenServer(string ipAddr, int port) { ipp = new IPEndPoint(IPAddress.Parse(ipAddr), port); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Bind(ipp); socket.Listen(0); SocketExist = true; } #endregion #region 关闭服务器 public void CloseServer() { if (socketClient != null) socketClient.Close(); if (socket != null) socket.Close(); SocketExist = false; } #endregion #region 接收客户端连接 /// /// 接收客户端连接 /// public void AcceptConn() { try { socketClient = socket.Accept(); // 阻塞等待客户端连接 Ep = socketClient.RemoteEndPoint; } catch (SocketException se) { Debug.Print(se.Message); } } #endregion const int recvTimeOut = -1; // 设置接收超时时间 const int recvLength = 65535; #region 接收数据 /// /// 接收数据 /// public void AcpMsg() { byte[] clientSend = new byte[recvLength]; // 定义接收数组 try { socketClient.ReceiveTimeout = recvTimeOut; socketClient.Receive(clientSend); byte[] serverSend = SystemCtrl.GetServerResponse(clientSend); if (serverSend != null) socketClient.Send(serverSend); } catch (SocketException se) // 客户端断开连接 { Debug.Print(se.Message); } finally { if (socketClient != null) socketClient.Close(); } } #endregion } }