/// <summary> /// Use TCP server to send message to a remote client by GUID (recommanded) /// </summary> /// <param name="argGuid"></param> /// <param name="message"></param> public void TcpServerSend(Guid argGuid, string message) { TcpClientWithGuid client = TcpServerGetRemoteTcpClient(argGuid); byte[] messageBytes = Encoding.ASCII.GetBytes(message); client.TcpStream.Write(messageBytes, 0, messageBytes.Length); }
/// <summary> /// Wait and listen for client. /// </summary> private void ListenClientConnect() { while (true) { bool enoughClientSign = false; for (int i = 0; i < _tcpClientArray.Length; i++) { if (_tcpClientArray[i] != null) { if (_tcpClientArray[i].SignOccupied != false) { continue; } } enoughClientSign = true; TcpClient tempTcpClient = _hostTcpServer.AcceptTcpClient(); _tcpClientArray[i] = new TcpClientWithGuid(); try { _tcpClientArray[i].Guid = Guid.NewGuid(); _tcpClientArray[i].TcpClient = tempTcpClient; _tcpClientArray[i].TcpClient.ReceiveBufferSize = 10000000; _tcpClientArray[i].SignOccupied = true; _tcpClientArray[i].TcpStream = tempTcpClient.GetStream(); _tcpClientArray[i].ReceiveThread = new Thread(TcpServerReceiveMessage) { IsBackground = true }; _tcpClientArray[i].ReceiveThread.Start(_tcpClientArray[i]); } catch (Exception) { throw; } _tcpServerNewClient?.Invoke(tempTcpClient.Client.RemoteEndPoint); break; } if (!enoughClientSign) { throw new NotEnoughTcpServerCapacityException("The capacity of the server is set to be " + MaxClient); } TcpServerRebuildClientList(); } }
/// <summary> /// Receive message /// </summary> /// <param name="argClientWithGuid"></param> private void TcpServerReceiveMessage(object argClientWithGuid) { TcpClientWithGuid tcpClientWithGuid = (TcpClientWithGuid)argClientWithGuid; StreamReader sr = new StreamReader(tcpClientWithGuid.TcpStream); while (true) { string result = sr.ReadLine(); if (result == null) { sr.Dispose(); tcpClientWithGuid.Stop(); } else { _tcpServerReceiveDelegate(Encoding.ASCII.GetBytes(result)); } } }
/// <summary> /// Use TCP server to send message to a remote client by GUID (recommanded) /// </summary> /// <param name="argGuid"></param> /// <param name="message"></param> public void TcpServerSend(Guid argGuid, byte[] message) { TcpClientWithGuid client = TcpServerGetRemoteTcpClient(argGuid); client.TcpStream.Write(message, 0, message.Length); }
/// <summary> /// Use TCP server to send message to a remote client by IP address /// </summary> /// <param name="argAddress"></param> /// <param name="message"></param> public void TcpServerSend(IPAddress argAddress, byte[] message) { TcpClientWithGuid client = GetRemoteTcpClient(argAddress); client.TcpStream.Write(message, 0, message.Length); }
/// <summary> /// Use TCP server to send message to a remote client by port number /// </summary> /// <param name="argPort"></param> /// <param name="message"></param> public void TcpServerSend(int argPort, byte[] message) { TcpClientWithGuid client = GetRemoteTcpClient(argPort); client.TcpStream.Write(message, 0, message.Length); }