SFML Problem z wysyłaniem pakietów przez UDP
Ostatnio zmodyfikowano 2013-03-16 10:33
anonim Temat założony przez niniejszego użytkownika |
SFML Problem z wysyłaniem pakietów przez UDP » 2013-03-13 18:04:35 Cześć Pisze sobie komunikator internetowy, odbieranie pakietów działa, ale nie działa ich wysyłanie: fragment funkcji main: sf::SocketUDP Socket; Socket.SetBlocking( false ); unsigned short Port = 4567;
if( !Socket.Bind( Port ) ) { std::cout << "Brak polaczenia!!!\n"; } else std::cout << "Polaczenie skuteczne\n";
fragment kodu odpowiedzialny za wysylanie pakietu: if( buttonWyslij.wasClicked( mysz.x, mysz.y ) ) { sf::Packet ToSend; std::string str =( std::string ) tekstEdit.text.GetText(); std::cout << str << "\n"; ToSend << str; Socket.Send( ToSend, klientAddress, Port ); labelChat.text.SetText(( std::string ) labelChat.text.GetText() + "<Ty> " + str + "\n" ); } fragment kodu odpowiedzialny za odbieranie pakietu: sf::Packet Received; std::string odp; if( Socket.Receive( Received, klientAddress, Port ) != sf::Socket::Done ) { } Received >> odp; if( !Received ) { } else labelChat.text.SetText(( std::string ) labelChat.text.GetText() + "<Drugi Uzytkownik> " + odp + "\n" );
Odpaliłem program na 2 kompach i nie działa, ale kiedy z drugiego komputera wysyłałem innym programem dane na pierwszy komputer, to odbierał on dane prawidłowo Co jest źle? |
|
Admixior |
» 2013-03-14 23:02:10 Sprawdź zaporę (czy masz odblokowany komp), adres ip (w sfml możesz podawać nazwę kompa jak jesteś wewnątrz sieci) oraz czy nie masz ukrywania kompa w sieci. Jeżeli powyższe jest nie prawidłowe to: ale kiedy z drugiego komputera wysyłałem innym programem dane na pierwszy komputer, to odbierał on dane prawidłowo |
Masz na myśli swoim programem zrobionym w SFML? Czy na obu komputera używasz tego samego programu(portu)? i wysyłasz pod odpowiedni? (najlepiej pokaż uzupełnianie klasy klientAdres. //Z jakiej wersji SFML korzystasz? |
|
hincu |
» 2013-03-15 11:40:48 spradzaj to na localhoscie czy dziala... jesli zadziala na localhoscie to w sieci tez bedzie dzialac, nie wysyla bo nie masz stalego ip |
|
anonim Temat założony przez niniejszego użytkownika |
» 2013-03-16 10:33:30 @Admixior Wysyłam na ten sam port, SFML 1.6 Zauważyłem coś co może być rozwiązaniem problemu, załóżmy, że mamy taki kod: #include <iostream> #include <SFML/Network.hpp> #include <string>
int main() { sf::IPAddress localAdress = sf::IPAddress::GetLocalAddress(); sf::SocketUDP Socket; Socket.SetBlocking( false ); unsigned short Port = 4567; if( !Socket.Bind( Port ) ) { std::cout << "Brak poloczenia z portem!!!\n"; } else std::cout << "Poloczenie z portem skuteczne\n"; std::string odp; for(;; ) { std::string nap = "Test"; sf::Packet ToSend; ToSend << nap; Socket.Send( ToSend, localAdress, Port ); sf::Packet Received; std::string odp; if( Socket.Receive( Received, localAdress, Port ) != sf::Socket::Done ) { } Received >> odp; if( !Received ) { } else { std::cout << odp << "\n"; } } }
To teraz wszystko działa, ale jeśli zmienię kolejność - najpierw spróbuje odebrać a potem wysłać, to program nie odbiera Pętla w której się zmieniło: for(;; ) { sf::Packet Received; std::string odp; if( Socket.Receive( Received, localAdress, Port ) != sf::Socket::Done ) { } Received >> odp; if( !Received ) { } else { std::cout << odp << "\n"; } std::string nap = "Test"; sf::Packet ToSend; ToSend << nap; Socket.Send( ToSend, localAdress, Port ); }
Dlaczego nie można tego robić w takiej kolejności (najpierw nasłuchiwać, a potem wysyłać)? |
|
« 1 » |