Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML, C++] Komunikacja klient-serwer (TCP) via global ip

Ostatnio zmodyfikowano 2015-01-11 21:43
Autor Wiadomość
marianexyx
Temat założony przez niniejszego użytkownika
[SFML, C++] Komunikacja klient-serwer (TCP) via global ip
» 2015-01-11 15:34:09
Staram się skomunikować klienta z serwerem (TCP) używając globalnego IP. Na lokalnym mi się udawało, natomiast na globalnym już nie. Wyczytałem, że może to być kwestia routera, tj. port forwardingu. Dodałem zatem regułę na routerze, ale dalej nic. Próbowałem na jednym globalnym ip podłączając oba komputery do routera nadając takie samo ip (to może tak działać?) oraz próbowałem podłączać się klientem poprzez inny internet z tabletu, ale też nic. Gdzie może być przyczyna? Poniżej kod i screenshoot reguły.

C/C++
//serwer
#include <SFML\Network.hpp>
#include <iostream>
#include <conio.h> // getch()

using namespace sf;
using namespace std;

int main()
{
    UdpSocket socket; //stwórz gniazdo
    unsigned short s = 50001; // port serwera
    unsigned short k = 50002; // port klienta
    socket.bind( s ); //ustaw swój port- serwera
    string tmp = ""; //zmienna w której będzie zapisywany pakiet przychodzący
    Packet pakiet; //stworzono pakiet do zapisywania iformacji przychodzących
    //IpAddress ip_k = "213.158.222.188"; //nie działa
    IpAddress ip_k = "192.168.0.12"; //działa
    socket.receive( pakiet, ip_k, k ); //odbierz pakiet klienta z danego ip i portu
    pakiet >> tmp; //zapisz pakiet do stringu
    cout << tmp;
    getch();
}

C/C++
//klient
#include <SFML\Network.hpp>
#include <iostream>
#include <string>
#include <conio.h> //getch()

using namespace sf;
using namespace std;

int main()
{
    UdpSocket socket; //stwórz gniazdo
    unsigned short s = 50001; // port serwera
    unsigned short k = 50002; // port klienta
    socket.bind( k ); //ustaw swój port- klienta
    string tmp = "String od klienta"; //string do wysłania
    Packet pakiet; //stworzono pakiet
    //IpAddress ip_s = "89.66.209.51"; //nie działa
    IpAddress ip_s = "192.168.0.11"; //działa
    pakiet << tmp; //wiadomość w pakiecie do wysłania na serwer
    socket.send( pakiet, ip_s, s ); //wyślij pakiet na ip i port serwera
    getch();
}

port forwarding
port forwarding
 
P-124654
DejaVu
» 2015-01-11 17:41:33
Musisz ustawić adres docelowy na routerze na IP komputera lokalnego, który ma dostawać komunikację na określonym porcie. Komunikacja wówczas będzie przez router przekierowywana z Twojego globalnego IP:port na Twój określony komputer w sieci lokalnej.
P-124667
marianexyx
Temat założony przez niniejszego użytkownika
» 2015-01-11 21:43:22
Dopiero gdy to napisałeś zauważyłem jakie to oczywiste :D

W każdym razie po wpisaniu mojego lokalnego IP nie ma zmian. Próbowałem znów zmieniać porty, otwierać wszystkie możliwe porty, zamieniać serwer z klientem, wrzucać w reguły wszystkie lokalne adresy komputerów, ustawiać typ na podwójny, podmieniać internet i dalej działa tylko łączenie poprzez lokalne IP. Próbuję dalej, lecz niestety nie znam dobrze zasad rządzących internetem i nie wiem gdzie gubi mi się informacja. Polecali w internetach program Wireshark, ale mnogość informacji i opcji mnie tam przeraża.

Edit: Ściągnięty program był w stanie dobrać się do otwartych przeze mnie portów:
port checker
port checker
 
Edit2: Znalazłem błąd. Mam pomieszany kod. Chciałem łączyć się przez TCP, a w kodzie używam socketów UDP. Kod był zlepiany z innego gotowego programu, z którego chciałem wywnioskować działanie biblioteki. Zajrzałem do dokumentacji i zauważyłem gdzie były błędy. Przepraszam za kłopot :P. I dziękuję za podpowiedź dot. port forwardingu- musiałbym to zmienić tak czy inaczej.
P-124691
« 1 »
  Strona 1 z 1