|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
}
|