using System.Net; using System.Net.Sockets; using System.Text; namespace Server; internal class Server { static void Main(string[] args) { using (Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 20000); serverSocket.Bind(endPoint); serverSocket.Listen(20); using (Socket clientSocket = serverSocket.Accept()) { Console.WriteLine(clientSocket.RemoteEndPoint); while (true) { byte[] headerBuffer = new byte[2]; int headerReceive = clientSocket.Receive(headerBuffer); if (headerReceive < 1) { Console.WriteLine("Disconnecting client..."); return; } else if (headerReceive == 1) { clientSocket.Receive(headerBuffer, 0, 1, SocketFlags.None); } short dataSize = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(headerBuffer)); byte[] dataBuffer = new byte[dataSize]; int dataReveiced = 0; while (dataReveiced < dataSize) { int n = clientSocket.Receive(dataBuffer, dataReveiced, dataSize - dataReveiced, SocketFlags.None); dataReveiced += n; } string str = Encoding.UTF8.GetString(dataBuffer); Console.WriteLine(str); byte[] echoBuffer = new byte[2 + dataBuffer.Length]; Array.Copy(headerBuffer, 0, echoBuffer, 0, headerBuffer.Length); Array.Copy(dataBuffer, 0, echoBuffer, 2, dataBuffer.Length); clientSocket.Send(echoBuffer); } } } } }