Witam,
Piszę komunikator sieciowy oparty na centralnym serwerze. Moje rozwiązanie polega na tym, że serwer nasłuchuje połączenia klientów. Kiedy podłącza się klient, tworzone są dla niego strumienie:
TcpClient tcpClient = serwer.AcceptTcpClient();
NetworkStream netStream = tcpClient.GetStream();
StreamReader strReader = new StreamReader(netStream);
StreamWriter strWriter = new StreamWriter(netStream);
Następnie dodawane są one do HashTables przechowujących powyższe strumienie dla każdego klienta:
strWriters.Add(client, strWriter);
strReaders.Add(client, strReader);
Po tym kroku tworzony jest nowy wątek obsługujący podłączającego się klienta. Do tego wątku przekazywane są referencje do powyższych tablic strumieni po to, żeby dany klient miał też dostęp do strumieni klientów podłączających się po nim.
Wątek nasłuchuje komunikatów i w zależności od prefixu podejmuje odpowiednią akcje np. dla prefixu "$$M" wysyła wiadomość do adresata.
if (prefix.Equals("$$M"))
{
message = "$$M#" + trescWiadmosci;
((StreamWriter)streamWriters[adresat]).WriteLine(message);
((StreamWriter)streamWriters[adresat]).Flush();
}
Taką wiadomość odbiera adresat i też na podstawie prefixu decyduje co z takim komunikatem zrobić.
Podobnie działa np. wyswietlanie profilu użytkownika (prefix ""$$P).
Mój problemem jest następujący. Zdarza się tak, że:
- klient wysyła komunikat
- serwer odbiera go i na podstawie odpowiednich danych wysyła go dalej przez StreamWriter do odpowiedniego adresata
jednak ta wiadomość nie dochodzi już niego.
Czy ktoś wie może, o co tu chodzi?