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

Pytanie dot. socketów w SFML2

Ostatnio zmodyfikowano 2015-04-10 17:26
Autor Wiadomość
BartQ
Temat założony przez niniejszego użytkownika
Pytanie dot. socketów w SFML2
» 2015-04-08 18:14:28
Witam, szybkie pytanko - w jaki sposób mogę wybrać port z którego chcę nadawać? Napisałem program, który czeka na pakiet, lecz za każdym razem leci z innego portu. Właściwie to nie pytałbym się o to gdyby nie fakt, że tylko jeden komputer (z dwóch) odbiera dane.

Posiadam dwie funkcje, jedna wysyła broadcast, a po niej druga, która czeka na informacje. Ten sam kod na obu maszynach. Jedna odbiera dane prawidłowo (gdy uruchamiam program na drugim PC), natomast druga nie - czeka i czeka...

C/C++
#include <SFML/Network.hpp>
#include "network.h"
#include <iostream>
#include <string>



void sendMyInfo()
{
    sf::UdpSocket searchSocket;
   
   
    std::string myLocalAddress = sf::IpAddress::getLocalAddress().toString();
    std::string broadcast = sf::IpAddress::Broadcast.toString();
   
    std::cout << "Twoje IP to: " << myLocalAddress << std::endl;
    std::cout << "BROADCAST: " << broadcast << std::endl;
   
    char dataSend[ 100 ] = "DANE.......";
    sf::IpAddress recipient = broadcast;
    unsigned short portSending = 54000;
    if( searchSocket.send( dataSend, 100, recipient, portSending ) != sf::Socket::Done )
    {
        // error...
        std::cout << "Sending ERROR" << std::endl;
    }
    else
         std::cout << "Sending SUCCESSED" << std::endl;
   
}

getClientsStruct receiveClientIfno()
{
    getClientsStruct ClientInfo;
   
    sf::UdpSocket searchSocket;
   
   
    // bind the socket to a port
    if( searchSocket.bind( 54000 ) != sf::Socket::Done )
    {
        std::cout << "ERROR binding" << std::endl;
    }
    else
         std::cout << "BIND success" << std::endl;
   
   
    char dataReceived[ 100 ];
    std::size_t received;
   
    sf::IpAddress sender;
    unsigned short portReceive;
   
    if( searchSocket.receive( dataReceived, 100, received, sender, portReceive ) != sf::Socket::Done )
    { // error...
        std::cout << "Receive ERROR" << std::endl;
    }
    std::cout << "Received " << received << " bytes from " << sender << " on port " << portReceive << std::endl;
   
   
    return ClientInfo;
}

@EDIT: Zmieniłem kod z wysyłania broadcastu na bezposrednie IP i działa prawidłowo...lecz potrzebuję broadcastu, dodam, że wszystkie firewale itp wyłączone ;/
P-130414
DejaVu
» 2015-04-09 17:42:14
router wycina broadcastowy ruch - to jego domyslna cecha.
P-130454
BartQ
Temat założony przez niniejszego użytkownika
» 2015-04-10 17:26:15
Dzięki za odpowiedź ;). Znalazłem problem - gdy nadaje 255.255.255.255 broadcast leci na złym interfejsie (mam ich kilka). Będę musiał dodatkowo wyciągać maskę i liczyć broadcast danej sieci.
P-130522
« 1 »
  Strona 1 z 1