bei dem unten stehenden Server gibt es das Problem, dass die CPU-Auslastung auf 100% steigt wenn der Client verschwunden ist. Es wird keine Exception geworfen und wenn man SendMessageBack ausschaltet hilft es auch nicht weiter. Habt ihr einen Tipp für mich?
using System;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;
namespace TCPServer
{
class Server
{
TcpListener tcpListener;
Thread listenThread;
public void Start()
{
tcpListener = new TcpListener(IPAddress.Any, 2000);
listenThread = new Thread(new ThreadStart(ListenForClients));
listenThread.Start();
}
private void ListenForClients()
{
tcpListener.Start();
while (true)
{
TcpClient client = tcpListener.AcceptTcpClient();
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
}
}
private void HandleClientComm(object client)
{
while (true)
{
TcpClient tcpClient = (TcpClient)client;
if (tcpClient.Connected)
{
NetworkStream clientStream = tcpClient.GetStream();
byte[] message = new byte[tcpClient.ReceiveBufferSize];
int bytesRead = 0;
do
{
try
{
bytesRead = clientStream.Read(message, 0, tcpClient.ReceiveBufferSize);
}
catch (Exception)
{
break;
}
if (bytesRead == 0) break;
String result = ASCIIEncoding.ASCII.GetString(message, 0, bytesRead);
String ip = tcpClient.Client.RemoteEndPoint.ToString();
Console.WriteLine(ip + " " + result);
Thread sendThread = new Thread(new ParameterizedThreadStart(SendMessageBack));
sendThread.Start(tcpClient);
Thread importThread = new Thread(new ParameterizedThreadStart(ImportInDB));
importThread.Start(result);
} while (clientStream.DataAvailable);
}
}
}
private void SendMessageBack(object client)
{
try
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
byte[] message = ASCIIEncoding.ASCII.GetBytes("OK");
clientStream.Write(message, 0, message.Length);
clientStream.Flush();
}
catch (Exception)
{
Console.WriteLine("Client ist verschwunden.");
}
}
private void ImportInDB(object data)
{
//kommt noch
}
}
}