using System.Net; using System.Net.Sockets; using System.Text; namespace Client; internal class Client { static void Main(string[] args) { using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 20000); socket.Connect(endPoint); while (true) { string str = Console.ReadLine() ?? string.Empty; if (str == "exit") return; byte[] buffer = Encoding.UTF8.GetBytes(str); byte[] newBuffer = new byte[2 + buffer.Length]; byte[] dataSize = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((short)buffer.Length)); Array.Copy(dataSize, 0, newBuffer, 0, dataSize.Length); Array.Copy(buffer, 0, newBuffer, 2, buffer.Length); socket.Send(newBuffer); byte[] headerBuffer = new byte[2]; int headerReceive = socket.Receive(headerBuffer); if (headerReceive < 1) { Console.WriteLine("Disconnecting client..."); return; } else if (headerReceive == 1) { socket.Receive(headerBuffer, 1, 1, SocketFlags.None); } short totalDataSize = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(headerBuffer)); byte[] dataBuffer = new byte[totalDataSize]; int dataReceived = 0; while (dataReceived < totalDataSize) { int n = socket.Receive(dataBuffer, dataReceived, totalDataSize - dataReceived, SocketFlags.None); dataReceived += n; } string receivedMessage = Encoding.UTF8.GetString(dataBuffer); Console.WriteLine($"[Received] {receivedMessage}"); //byte[] buffer2 = new byte[256]; //int byteRead = socket.Receive(buffer2); //if (byteRead < 1) //{ // Console.WriteLine("Disconnecting server..."); // return; //} //string str2 = Encoding.UTF8.GetString(buffer2); //Console.WriteLine($"[Receive] {str2}"); } } } }