How can I accept multiple clients?
I want to write my own http server using
How can I accept multiple sockets? Should I create new
TCPTCP and System.Net.SocketsSystem.Net.Sockets. Here is my code:using System.Net;
using System.Net.Sockets;
using System.Text;
const string ipAddress = "127.0.0.1";
const int port = 27015;
try
{
// create socket
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
// bind ip address
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(ipAddress),port);
listenSocket.Bind(ipEndPoint);
// Listen
listenSocket.Listen();
Console.WriteLine($"listening on http://{ipAddress}:{port}");
Socket acceptSocket = await listenSocket.AcceptAsync();
byte[] buffer = new byte[1024];
int bytesReceived = await acceptSocket.ReceiveAsync(buffer, SocketFlags.None);
string message = Encoding.UTF8.GetString(buffer, 0, bytesReceived);
Console.WriteLine(message);
string response = "HTTP/1.1 200 OK\r\nContent - Type: text/html\r\n\r\n{ \"msg\"=\"Hello world!\"}";
await acceptSocket.SendAsync(Encoding.UTF8.GetBytes(response, 0, response.Length));
acceptSocket.Close();
listenSocket.Close();
}
catch (Exception ex)
{
Console.WriteLine($"[{ex.GetType()}]: {ex.Message}");
}using System.Net;
using System.Net.Sockets;
using System.Text;
const string ipAddress = "127.0.0.1";
const int port = 27015;
try
{
// create socket
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
// bind ip address
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(ipAddress),port);
listenSocket.Bind(ipEndPoint);
// Listen
listenSocket.Listen();
Console.WriteLine($"listening on http://{ipAddress}:{port}");
Socket acceptSocket = await listenSocket.AcceptAsync();
byte[] buffer = new byte[1024];
int bytesReceived = await acceptSocket.ReceiveAsync(buffer, SocketFlags.None);
string message = Encoding.UTF8.GetString(buffer, 0, bytesReceived);
Console.WriteLine(message);
string response = "HTTP/1.1 200 OK\r\nContent - Type: text/html\r\n\r\n{ \"msg\"=\"Hello world!\"}";
await acceptSocket.SendAsync(Encoding.UTF8.GetBytes(response, 0, response.Length));
acceptSocket.Close();
listenSocket.Close();
}
catch (Exception ex)
{
Console.WriteLine($"[{ex.GetType()}]: {ex.Message}");
}How can I accept multiple sockets? Should I create new
ThreadThread for each socket (I'll add while loop later)? Also, should I store threads somewhere to finish them after I handled request? Maybe you can give any other advices on this topic
