Próbuję napisać wielowątkowy komunikator. W zamierzeniu serwer ma pośredniczyć w wymianie danych pomiędzy klientami, ale nie o tym.
Słuchanie odbywa się w osobnym wątku, klient łączy się i w osobnym wątku serwer czyta wiadomości.
To jest metoda odpowiedzialna za słuchanie wiadomości od klienta.
private void HandleClientComm(object client)
{
string messageReceived = null;
byte[] bytesFrom = new byte[4096];
int bytesRead;
NetworkStream clientStream = null;
using (TcpClient tcpClient = (TcpClient)client)
{
clientStream = tcpClient.GetStream();
while (true)
{
bytesRead = 0;
try
{
//blocks until a client sends a message
bytesRead = clientStream.Read(bytesFrom, 0, 4095);
}
catch (Exception ex)
{
//a socket error has occured
System.Windows.MessageBox.Show("Blad z odbierania wiad " + ex.Message);
break;
}
if (bytesRead == 0)
{
//the client has disconnected from the server
break;
}
//message has successfully been received
messageReceived = ASCIIEncoding.ASCII.GetString(bytesFrom);
if (messageReceived.StartsWith("\\name"))
{
string pseudo = messageReceived.Substring(6);
activeUsers.Add(new User(pseudo, tcpClient));
}
else if (messageReceived.StartsWith("\\connect"))
{
//tutaj bedzie komunikacja z inna wiaruchna
}
else
{
string podlacz = string.Join(" ", new string[] { "Połączyłem sobie ", "testowego" });
messageReceived += "\n";
Log += podlacz;
Log += messageReceived;
}
}
}
//tcpClient.Close();
}
Jednak dostaję wyjątek w messagebox’ie
Jak mogę to naprawić?
Będę wdzięczny za wszelkie informacje.
Dziękuję i pozdrawiam.