Komunikacja TCP/IP

0

Witam
Co muszę zrobić, żeby za pomocą mojej aplikacji służącej komunikowaniu się w sieci lokalnej (TcpListener, TcpClient itp) umożliwić komunikowanie się poprzez internet?
W sensie na początek zwykłe łączenie i ewentualnie prosty komunikat.

To jest kwestia programistyczna czy sprzętowa?
Jaki adres IP mam wpisywać w serwerze i zarazem w kliencie?

0

Serwer nasłuchuje, więc podajesz tam adres interfejsu na którym ma to robić (lub 0.0.0.0 - jeśli ma być na każdym).
Adres w kliencie? Adres serwera. Ten na którym nasłuchuje (lub dowolny jego adres, jeśli nasłuchuje na 0.0.0.0).

0

sprzętowa
musisz mieć albo ip zewnętrzne na serwerze albo przekierowane porty.

0

Zapomniałem dodać, że łączę się przez router.
Co w takim przypadku?
@nav: nie może to być lokalny adres bo aplikacja klienta odczyta to, jako szukanie serwera w jego sieci lokalnej, jeśli dobrze rozumiem

Przykładowo ja mam u siebie serwer a ktoś ma klienta.
Uruchamiając program łączy się ze mną jako z serwerem postawionym na adresie...jakim?

@Misiekd
Czyli aplikacja pozostaje niezmieniona?
Np u siebie mam TcpListener(IPAddress.Any, 7000) więc na routerze przekierowuję do mnie połączenia TCP na port 7000 a na kliencie ustawiam TcpClient(host, 7000) gdzie host jest...czym? Moim zewnętrznym IP?

0
Święty napisał(a)

Uruchamiając program łączy się ze mną jako z serwerem postawionym na adresie...jakim?

zewnętrznym - wpisz sobie w przeglądarce whatismyip.com to się dowiesz. ALE musisz na routerze przekierować port, z którego korzystasz na swój komp - jak poczytaj w manualu do routera

0

Yhm ok.
A co muszę zrobić, żeby przesłać jakiś komunikat jako odpowiedź do klienta. U niego też muszę przekierować dany port czy da się jakoś wykorzystać poprzednio nawiązane połączenie?

0

Ok, jest problem dodatkowy.
Okazało się, że jestem za podwójnym NATem. Jest więc jakieś rozwiązanie pozwalające stworzyć taką aplikację bez interwencji sprzętowej? (po prostu nie mam dostępu do drugiego routera)
Np coś a'la programowe forwardowanie portów?

0

nie

0

Więc jakie rozwiązanie? (niemożliwe, że "nie ma" :) )

0

Zewnętrzny serwer pośredniczący w komunikacji, lub rozwiązania typu VPN.

Albo poczekać te 10 lat jak każdy z nas będzie miał publiczny adres IPv6 i NAT-y wymrą. Aczkolwiek na to się nie zanosi.

0

No fakt, zewnętrzny serwer brzmi dobrze. Ale w którą stronę pójść? XMPP?
Może ktoś polecic jakieś rozwiązania pod .NET?
Póki co natknąłem się na agsXMPP oraz jabber-net

Jakies przykłady / opinie? :)

0

XMPP to standard komunikacji natychmiastowej, więc czemu nie?

Znajomy kiedyś pisał komunikat korzystając chyba właśnie z agsXMPP. Za bardzo się nie namęczył, a w miarę szybko stworzył coś działającego. Mi się nie chciało przyglądać dokładnie. Za to sam protokół XMPP nie jest zbyt trudny, podstawowe funkcje można dość łatwo zaimplementować nawet "od zera", przesyłając do serwera czysty XML - ale jeśli chcesz mieć TLS, różne dodatki i tak dalej - może łatwiej przyjrzeć się gotowym bibliotekom.

Ale nie musisz od razu angażować XMPP - możesz napisać po prostu swój serwer, gorzej jedynie będzie z udostępnieniem go użytkownikom, który będzie prosto przeklejał komunikaty z jednego klienta do drugiego (coś a'la proxy).

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