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

[SFML2] Program sieciowy, nie łączy się z innym komputerem

Ostatnio zmodyfikowano 2016-02-28 18:48
Autor Wiadomość
qest43
Temat założony przez niniejszego użytkownika
[SFML2] Program sieciowy, nie łączy się z innym komputerem
» 2016-02-28 18:25:12
Program sieciowy który napisałem łączy się z tym samym komputerem, jak się poda to samo IP dla klienta i serwera na tym samym PC. IP jest w takim formacie 192.168.0.4
Natomiast jak odpalam tę aplikację na 2 różnych komputerach to programy się nie łączą, nie wiem czy to jest problem z portami czy coś, jak to rozwiązać?
P-145385
Gibas11
» 2016-02-28 18:40:52
Komputery są w jednej sieci?
P-145388
qest43
Temat założony przez niniejszego użytkownika
» 2016-02-28 18:43:21
W innej, ale adresy publiczne też nie działają jak się wpisze. Nawet na tym samym PC jak podaje adres publiczny to nie działa.
P-145389
Gibas11
» 2016-02-28 18:45:54
To w sieci z serwerem musisz przekierować jakiś port w ruterze na PC z serwerem a klient musi podać adres rutera (prawdopodobnie IPv6).
Ew. użyj czegoś pokroju hamachi.
P-145390
qest43
Temat założony przez niniejszego użytkownika
» 2016-02-28 18:48:36
Z hamachi by działało, no ale ja chcę tworzyć aplikacje sieciowe więc to bez sensu.
Tutaj podaje kod:

C/C++
#include <SFML\Graphics.hpp>
#include <SFML\Network.hpp>
#include <string>
#include <iostream>

using namespace sf;
using namespace std;

void func()
{
}

int main()
{
    const int WIDTH = 600;
    const int HEIGHT = 315;
   
    IpAddress ip;
   
    RenderWindow window( VideoMode( 600, 315 ), "Program", Style::Close );
   
    //czcionka i pierwszy wyświetlony napis
    Font font;
    font.loadFromFile( "robotastic.ttf" );
   
    Text napis( "Serwer ([S])/Klient ([K])", font, 20 );
    napis.setPosition( WIDTH / 2 - napis.getGlobalBounds().width / 2,( HEIGHT / 2 - napis.getGlobalBounds().height / 2 ) );
    bool serwer; //flaga mowiaca o tym czy gracz jest klientem czy serwerem
   
    //wybor czym jestesmy (wiem, dziwnie to brzmi (: )
    bool status = true;
   
    while( status )
    {
        Event event;
       
        while( window.pollEvent( event ) )
        {
            switch( event.type )
            {
            case Event::KeyReleased:
                switch( event.key.code )
                {
                case Keyboard::S:
                    {
                        serwer = true;
                        status = false;
                        break;
                    }
                case Keyboard::K:
                    {
                        serwer = false;
                        status = false;
                        break;
                    }
                }
            }
           
            break;
        }
       
        window.clear();
        window.draw( napis );
        window.display();
    }
   
    //podajemy ip o ile wczesniej nie zostalo wczytane z pliku
    if( ip.toString() == "0.0.0.0" )
    {
        napis.setString( "Podaj ip klienta/serwera" );
        napis.setPosition( WIDTH / 2 - napis.getGlobalBounds().width / 2,( HEIGHT / 2 - napis.getGlobalBounds().height / 2 ) - 30 );
       
        Text text_ip( "", font, 15 );
        string str_ip;
       
        bool b = false;
        while( !b )
        {
            Event event;
            while( window.pollEvent( event ) )
            {
                if( event.type == Event::Closed )
                     b = true;
               
                if( event.type == Event::KeyReleased && event.key.code == Keyboard::Return )
                {
                    ip = str_ip;
                    b = true;
                }
                else if( event.type == Event::TextEntered )
                {
                    if( event.text.unicode == 8 ) //backspace
                    {
                        if( str_ip.size() > 0 )
                             str_ip.erase( str_ip.size() - 1, 1 );
                       
                    }
                    else if( event.text.unicode < 128 && event.text.unicode != 13 )
                         str_ip +=( char ) event.text.unicode;
                   
                    text_ip.setString( str_ip );
                    text_ip.setPosition( WIDTH / 2 - text_ip.getGlobalBounds().width / 2, HEIGHT / 2 - text_ip.getGlobalBounds().height / 2 );
                }
            }
           
            window.clear();
            window.draw( napis );
            window.draw( text_ip );
            window.display();
        }
    }
   
    //Probne polaczenie i odebranie pliku
    unsigned short s_port = 50001; //port na ktorym dane odbiera serwer
    unsigned short k_port = 50002; //port na ktorym dane odbiera klient
   
    UdpSocket socket;
    if( serwer ) socket.bind( s_port );
    else socket.bind( k_port );
   
    if( serwer )
    {
        string tmp;
        Packet pakiet;
        socket.receive( pakiet, ip, s_port );
       
        pakiet >> tmp;
        cout << tmp << endl;
       
        pakiet.clear();
       
        tmp = "Polaczono z serwerem!n";
        pakiet << tmp;
        socket.send( pakiet, ip, k_port );
    }
    else
    {
        string tmp = "Polaczono z klientemn";
        Packet pakiet;
        pakiet << tmp;
        socket.send( pakiet, ip, s_port );
       
        pakiet.clear();
        socket.receive( pakiet, ip, k_port );
        pakiet >> tmp;
        cout << tmp;
    }
   
    system( "pause" );
}

Czyli ja tworząc serwer podaje IP klienta, a klient podaje IP serwera czy jak to działa?
P-145391
« 1 »
  Strona 1 z 1