C# sockety w azure

C# sockety w azure
KimPix
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:6
0

Zrobiłem aplikacje obsługującą sockety w c# i na localhoscie działa bez problemu. Problem pojawił się, gdy postawiłem aplikację na VM w azure. Przy starcie socketów wyrzuca błąd
Cannot assign requested address
W ustawieniach sieci VM ustawiłem port 51207 (port działania socketów) jako dozwolony, ale nadal nie działa
screenshot-20201109121501.png
Wie ktoś co na to poradzić?

Edit: VM stoi na ubuntu 18.04

edytowany 1x, ostatnio: KimPix
SO
  • Rejestracja:ponad 10 lat
  • Ostatnio:około rok
0

Cannot assign requested address

A na jaki adres:port próbujesz bindować aplikację?

KimPix
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:6
0

Port podany wyżej, a IP publiczne - te samo co do ssh, www etc

SO
  • Rejestracja:ponad 10 lat
  • Ostatnio:około rok
1
KimPix napisał(a):

a IP publiczne - te samo co do ssh, www etc

No właśnie, z wewnątrz maszyny nie możesz bindować na publiczne IP, bo ona nawet nie jest świadoma jego istnienia.

Zbinduj się na prywatny adres IP i z regułami jakie masz teraz ustawione powinno działać.

KimPix
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:6
0

Teraz działa, ale client nie może się z nim połączyć nieznany host

SO
  • Rejestracja:ponad 10 lat
  • Ostatnio:około rok
1

Klient musi się łączyć po publicznym adresie IP maszyny.

KimPix
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:6
0

No ale właśnie pokazuje powyższy błąd przy tym

SO
  • Rejestracja:ponad 10 lat
  • Ostatnio:około rok
0

Ale łączysz się po IP i dostajesz nieznany host?
Zawsze myślałem, że nieznany host bardziej dotyczy serwerów DNS, czyli jak podasz jakąś nieistniającą nazwę domenową.

KimPix
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:6
0

Tak, podaje w kliencie publiczny adres IP i port i wyrzuca powyższy błąd
Serwer nasłuchuje na prywatnym adresie IP

edit:
w taki sposób się łącze

Kopiuj
IPHostEntry host = Dns.GetHostEntry(Config.serverIPAdress);
IPAddress ipAddress = host.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ipAddress, Config.serverPort);

sender = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);```
edytowany 1x, ostatnio: KimPix
UglyMan
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:2206
0

Tam nie trzeba gdzieś w konfiguracji dopuścić ruchu z twojego IP? Możesz też zobaczyć czy telnet ci się łączy. Może port jest zablokowany na fajnymwałolu.

SO
  • Rejestracja:ponad 10 lat
  • Ostatnio:około rok
1

@KimPix: Ja bym to wywalił IPHostEntry host = Dns.GetHostEntry(Config.serverIPAdress);

Na 99% tu jest błąd, bo wywołujesz Dns.GetHostEntry podając adres IP.

KimPix
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:6
1

Dzięki za pomoc, naprawiłem.

Linijke IPHostEntry host = Dns.GetHostEntry(Config.serverIPAdress); usunąłem i zmieniłem

Kopiuj
IPAddress ipAddress = IPAddress.Parse(Config.serverIPAdress);
IPEndPoint remoteEP = new IPEndPoint(ipAddress, Config.serverPort);

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.