Klient i serwer w jednym programie

0

Mam problem z aplikacją. Znalazłem ładny opis jak zrobić aplikację typu klient-serwer, ale na 2 formatkach. Ja natomiast chciałbym te funkcje połączyć, tak by aplikacja mogła pełnić funkcję klienta lub serwera. Posługuję się tym opisem http://www.centrumxp.pl/dotNet/831,2,Komunikator_w_C.aspx można sobie ściągnąć gotowy program.

Żeby wprowadzić swoje zmiany, edytuję projekt serwera. Dodaję button Połącz, texbox'a na adres IP oraz 2 kontrolki WorkerSupportsCancellation i zmieniam ich nazwy dodając "_k". Następnie zmieniam w kodzie nazwy tych kontrolek, na te z "_k" (tylko w tych fragmentach, odpowiedzialnych za obsługę klienta).
Po uruchomieniu programu (2x) i kliknięciu w jednym oczekiwania na połączenie, a w 2 połączenia, nic się nie dzieje, pojawia się od razu komunikat rozłączony.

Możecie dać jakieś wskazówki w tym kierunku lub napisać czy to w ogóle jest możliwe (takie połączenie, w tym konkretnym kodzie)?

1

Jest możliwe, napisałem kiedyś taki komunikator. Daj maila to myślę że będę mógł Ci wysłać kod.

*Edit:
Jest możliwe - znaczy jest możliwe napisanie takiego komunikatora ;]. Nie wiem jak z tym kodem co wysłałeś, ale polecam mój program.

0
joni55 napisał(a)

Jest możliwe, napisałem kiedyś taki komunikator. Daj maila to myślę że będę mógł Ci wysłać kod.

Wrzuć tu kod, bo też jestem zainteresowany.

1

Nie wiedziałem że się da załącznik tu umieścić, dlatego prosiłem o maila. Dodam tylko że program nie jest skończony. Nie da się na przykład zakończyć rozmowy. Jak jedna strona wyłączy aplikację to druga otrzyma kupę śmieci. Nie chciało mi się tego kończyć. Druga rzecz, pisałem to ze 2 lata temu, a dzisiaj jeszcze nie skończyłem liceum - wprost: amatorszczyzna, jestem samoukiem.
Działa tak, że po włączeniu wybierasz IP które ma twój komputer, które chcesz używać. W tym momencie program staje się serwerem oczekujący na połączenie od takiej samej aplikacji, i sam może nawiązać połączenie z taką samą aplikacją. Mam nadzieje że pomogłem, chyba o to Ci chodziło.

0

@joni55 dzięki wielkie za poświęcony czas, ale już doszedłem do ładu ze swoim kodem. Ładnie wszystko działa, wystarczyło się z problemem przespać :)
Jeszcze raz dzięki i miłego popołudnia życzę.

0

A jednak się pośpieszyłem. Mój kod działa super, ale tylko na sieci LAN, łącznie w WAN nie przynosi rezultatu. Kod jest taki sam jak w linku podanym wcześniej, myślę że trzeba zmienić coś w tej linii:

klient = new TcpClient();
            wyswietl(txtLog, "Próbuje się połączyć\n");
            klient.Connect(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));

ale nie wiem za bardzo co :/

1

Ja spróbuje z innej strony:
Jeżeli dobrze myślę to dla WAN musisz mieć zewnętrzne IP tam gdzie masz serwer. Zauważ, że w moim programie na początku wybiera się własne IP, na którym "stoi serwer" - ip dla TcpListener. Pewno używasz tego samego? Zobacz jakie IP tam przypisujesz.
Nie wiem czy dobrze trafiłem z odpowiedzią, bo nie wiem na jakim jesteś poziomie. Jak coś to zignoruj tego posta ;].

0

Jest dokładnie tak jak piszesz. Sprawdzałem różne rozwiązania, ale dopiero uruchomienie programu z opcją serwera na kompie ze stałym IP przyniosła rezyltaty. Odpisałbym wcześniej, ale coś dziwnego się z tym forum jeszcze dzieje :/

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