using System.Net; using System.Net.Sockets; using System.Text; namespace Server; internal class Server { private static readonly int BUFFER_SIZE = 256; static void Main(string[] args) { 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(1000); serverSocket.BeginAccept(AcceptCompleted, serverSocket); while (true) { Thread.Sleep(1000); } } private static void AcceptCompleted(IAsyncResult ar) { if (ar.AsyncState == null) return; Socket serverSocket = (Socket)ar.AsyncState; Socket clientSocket = serverSocket.EndAccept(ar); Console.WriteLine(clientSocket.RemoteEndPoint); serverSocket.BeginAccept(AcceptCompleted, serverSocket); byte[] buffer = new byte[BUFFER_SIZE]; clientSocket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCompleted, (clientSocket, buffer)); // state: tuple } private static void ReceiveCompleted(IAsyncResult ar) { if (ar.AsyncState == null) return; (Socket clientSocket, byte[] buffer) = ((Socket, byte[]))ar.AsyncState; int n1 = clientSocket.EndReceive(ar); if (n1 < 1) { Console.WriteLine("Client is disconnected"); clientSocket.Dispose(); return; } Console.WriteLine(Encoding.UTF8.GetString(buffer)); byte[] newBuffer = new byte[BUFFER_SIZE]; clientSocket.BeginReceive(newBuffer, 0, newBuffer.Length, SocketFlags.None, ReceiveCompleted, (clientSocket, newBuffer)); // state: tuple } }