Jak utrzymać socket przy życiu

0

Mam takie pytanie. Tworzę apke która przyjmować będzie połączenia od klientów z tcplistenera, w momencie kiedy ustawiam Socket name = listener.AcceptSocket(); wysyłam ten socket do drugiej metody, która będzie miała za zadanie trzymać ten socket do momentu kiedy klient bedzie przysyłał wiadomości do serwisu. Metoda ta jest w nieskończonej pętli while. Po przejsciu jednej iteracji metody, wiadomosc zostaje odebrana oraz wysłana, jednak po przejsciu drugiej iteracji kod staje na linii: information= networkStream.Read(buff, 0, socket.ReceiveBufferSize); Czy jest jakiś sposób aby ten kod nie zatrzymywał się na powyższej linii, tylko dalej otrzymywał dane bez ponownego wywołania Socket name = listener.AcceptSocket(); ????

Z góry dziękuje za pomoc.

1
m_socket.BeginReceive(m_buffer, m_offset, size, SocketFlags.None, out outError, ReadCallback, null);

...

private void ReadCallback(IAsyncResult iar)
{
	SocketError error = SocketError.Fault;
	int received = 0;
	received = m_socket.EndReceive(iar, out error);
}
0
BigBrogrammer napisał(a):

jednak po przejsciu drugiej iteracji kod staje na linii: information= networkStream.Read(buff, 0, socket.ReceiveBufferSize);

A takie głupie pytanie: czy klient wysłał więcej danych? (sprawdziłeś to na WireShark)
Jeśli nie ma więcej danych, to chyba dlatego Read wisi, bo na nie czeka.

I na litość boską pokaż kod. Teraz nawet nie wiadomo, z jakiej biblioteki jest to Read.
Doczytałeś w dokumentacji co się ma dziać, jeśli nie ma danych, albo jeśli jest błąd?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.