You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.5 KiB
55 lines
1.5 KiB
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |