c# socket, oczekiwanie na połączenie drugiej strony

0

pisze program, który jednocześnie odbiera i wysyła dane, nawet już działa, chce jeszcze tylko, żeby program potrafił rozpoznać kiedy druga strona również się połączy

wrzucam tworzenie socketa i funkcje startującą połączenie


sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);        

public void start()
        {

                epLocal = new IPEndPoint(ip1, port1);
                sck.Bind(epLocal);

                epRemote = new IPEndPoint(ip2, port2);
                sck.Connect(epRemote);

                byte[] buffer = new byte[1500];
                sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(czytaj), buffer);

                
            }

jeśli teraz zastartujemy połączenie (a druga strona tego nie zrobi) i wyślemy jakieś dane to wywala błąd "Istniejące połączenie zostało gwałtownie zamknięte przez zdalnego hosta" a chce żeby jakimś sposobem dowiedzieć się czy druga strona jest już w stanie odbierać dane

0

mozesz otoczyć kod w try...catch i złapać odpowiedni wyjątek

0

Nie sprawdzałem ale mniej wiecej tak:

 
TcpListener server = new TcpListener(IPAdress.Any, 1024);
TcpClient client = server.AcceptTcpClient();

if(client.Connected)
   Console.WriteLine("Dołączono do serwera");

Daj sobie to w osobnym wątku i w jakiejś pętli.
Dodatkowo lepiej korzystać z klas Tcp* bo łatwiej i czytelniej kod wygląda a to i tak jest wrapper na sockety.

0

niestety, ale wlasciwosc socket.connected; daje wartosc true nawet, gdy polaczenia faktycznego jako tako nie ma, ale funkcja startująca zostala wykonana, czyli odda wartosc true jak ja zastartuje wysylanie, ale druga strona nie wystartuje odbierania i wtedy gdy zaczne wysylanie to wyrzuca wyjatek, o ktorym pisalem w 1szym poscie a tego wlasnie chciale, uniknac

jak na razie sposob z try catch zeby probowac cokolwiek wyslac az sie uda wydaje sie sensowny, ale chyba nie jest zbyt "ladny"

1 użytkowników online, w tym zalogowanych: 0, gości: 1