public class SimpleTcpServer
{
private int networkPort;
private bool isWaitingListen = true;
private bool isWaitingRecieve = true;
private System.Net.Sockets.Socket listenSocket;
public void NetworkStart(int networkPort)
{
this.networkPort = networkPort;
this.listenSocket = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
var serverEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Any, networkPort);
this.listenSocket.Bind(serverEndPoint);
this.listenSocket.Listen(10);
new System.Threading.Thread(Listen) { IsBackground = true }.Start(listenSocket);
}
private void Listen(object obj)
{
if (!(obj is System.Net.Sockets.Socket socket)) return;
while (isWaitingListen)
{
var currentSocket = socket.Accept();
isWaitingRecieve = true;
if (this.isWaitingRecieve)
{
System.Threading.Thread.Sleep(100);
isWaitingRecieve = false;
System.Threading.Thread.Sleep(200);
}
if (currentSocket.Connected)
{
new System.Threading.Thread(ReceiveData) { IsBackground = true }.Start(currentSocket);
}
}
}
private void ReceiveData(object obj)
{
if (!(obj is System.Net.Sockets.Socket socket)) return;
while (isWaitingRecieve)
{
var receiveBuffer = new byte[1024];
System.Threading.Thread.Sleep(50);
var size = socket.Receive(receiveBuffer);
if (size > 0)
{
var receivedData = System.Text.Encoding.UTF8.GetString(receiveBuffer, 0, size);
}
}
}
public void NetworkClose()
{
if (this.isWaitingListen)
{
this.isWaitingListen = false;
using (var client = new System.Net.Sockets.TcpClient())
{
client.Connect("127.0.0.1", this.networkPort);
client.Close();
}
}
if (this.isWaitingRecieve)
{
System.Threading.Thread.Sleep(100);
isWaitingRecieve = false;
System.Threading.Thread.Sleep(200);
}
listenSocket?.Close();
}
}