[SFML2] Program sieciowy, nie łączy się z innym komputerem
Ostatnio zmodyfikowano 2016-02-28 18:48
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ć? |
|
Gibas11 |
» 2016-02-28 18:40:52 Komputery są w jednej sieci? |
|
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. |
|
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. |
|
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: #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 ); 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; 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(); } 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 ) { 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(); } } unsigned short s_port = 50001; unsigned short k_port = 50002; 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? |
|
« 1 » |