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

[SFML] Failed to bind socked to port ....

Ostatnio zmodyfikowano 2015-03-20 21:37
Autor Wiadomość
matka5432
Temat założony przez niniejszego użytkownika
[SFML] Failed to bind socked to port ....
» 2015-03-11 12:58:48
Witam was, dlaczego program po natknięciu się na funkcje sock.bind() wyświetla komunikat jak w temacie?

poniżej zamieszczam kod

C/C++
#include <SFML/Network.hpp>
#include <iostream>
using namespace std;
int main()
{
    sf::UdpSocket sock; // tworzymy gniazdo
   
    const int datasize = 100; // rozmiar danych do wysłania/odebrania
    char data[ datasize ] = "lalal ko no e zioro"; // dane
   
    // wysyłanie
    sf::IpAddress ipdo( "192..." );
    unsigned int portdo = 5600; // port, na który chcesz wysłac dane
   
    if( sock.send( data, datasize, ipdo, portdo ) != sf::Socket::Done )
    {
        cerr << "Nie mozna wyslac danych!\n";
        exit( 1 );
    }
   
    // odbieranie
    sf::IpAddress ipod( "192..." );
    unsigned int portod = 5600; // port, na którym chcesz odbierać dane
    unsigned int senderport = 5400; // port, z którego zostanły wysłane dane
    unsigned int received;
    sock.bind( portod );
    if( sock.receive( data, datasize, received, ipod, senderport ) != sf::Socket::Done )
    {
        cerr << "Nie mozna odebrac danych!\n";
        exit( 1 );
    }
    cout << "Odebrano bajtów: " << received << endl;
    return 0;
}

Chciałem jeszcze zapytać, dlaczego w logu podczas kompilacji mam error'a dotyczącego sock.receive() o treści:

no matching function for call to 'sf::UdpSocket::receive(char [100], const int&, unsigned int&, sf::IpAddress&, unsigned int&)'|

PS. Podczas kompilacji usunąłemm funkcję sock.receive() zastępując ją wartością jeden, dlatego kod został skompilowany.
P-128147
Lora
» 2015-03-11 13:23:04
Czytaj komunikaty kompilatora:
no known conversion for argument 5 from 'unsigned int' to 'short unsigned int&'
.
C/C++
short unsigned int senderport = 5400;
Teraz powinno działać.

EDIT:
A co do tej funkcji bind(), to może ten port masz już zajęty, spróbuj dać jakiś inny.
P-128148
matka5432
Temat założony przez niniejszego użytkownika
» 2015-03-11 14:05:30
Faktycznie, teraz działa sock.receive(). Jeszcze nie jestem tak obyty w programowaniu. Dzieki :)
Jeśli chodzi o bind, próbowałem ustawić kilka wartości z przedzialu 5600 do 56000. Niestety nic nie pomaga.
P-128149
czosnek17
» 2015-03-11 16:36:30
To dlatego że ten socket już "używa" jakiegoś portu.
Uruchamiaj odbieranie w drugim programie, albo użyj drugiego socketu
C/C++
sf::UdpSocket sock2;
sock2.bind( portod );
Jest też unbind()
http://www.sfml-dev.org​/documentation/2.0​/classsf_1_1UdpSocket.php#a2c4abb8102a1bd31f51fcfe7f15427a3
P-128159
matka5432
Temat założony przez niniejszego użytkownika
» 2015-03-18 12:52:04
Nadal coś mi nie wychodzi.. Funkcja receive zatrzymuje program i nasłuchuje. Ale niestety nic nie odbiera. podzieliłem nawet kod na 2 programy i kiedy włączę talket (wysyłający) to funkcja receive w drugim programie w ogóle nie reaguje. Odbieram na portach 50000 - 60000, a IP brałem z ip config to na samej gorze 192.168.... oraz ze stron które pokazują moje ip (oba ip były różne). W żadnym przypadku funkcja receve nie reaguje.
P-128676
Lora
» 2015-03-18 13:31:57
Może to IP wpisujesz nieprawidłowe. Spróbuj może przez hamachi się łączyć i zobacz czy działa (tam przynajmniej będziesz miał pewność, że IP jest dobre).
P-128680
czosnek17
» 2015-03-18 16:38:47
Użyj localhosta 127.0.0.1 i sprawdź, czy nic nie blokuje ruchu sieciowego.
P-128706
matka5432
Temat założony przez niniejszego użytkownika
» 2015-03-18 22:19:30
Lora masz rację - wpisywałem złe IP. Skąd mam w takim razie wiedzieć jakie mam IP nie używając tak okrężnej drogi jak hamachi?

Jednak problem nie do końca rozwiązany. Postęp jest taki, że wiadomość wysyła się pod warunkiem, ze programy uruchomione są na tym samym komputerze.
Wysłałem program koledze i wpisywaliśmy IP które pokazuje hamachi (on moje, ja jego), następnie IP, które pokazuje strona (coś typu moje IP itp) oraz IP z cmd po wpisaniu ipconfig. Niestety nic z tego nie działa.
Kiedy uruchamiam programy na jednym komputerze działają ip z cmd oraz hamachi.
P-128752
« 1 » 2
  Strona 1 z 2 Następna strona