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.
tcpipSocket/Echo/Server/Server.cs

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