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

[C++, SFML 1.6, Network] Odbieranie danych od klienta

Ostatnio zmodyfikowano 2013-12-24 11:59
Autor Wiadomość
DanielSC
Temat założony przez niniejszego użytkownika
[C++, SFML 1.6, Network] Odbieranie danych od klienta
» 2013-12-23 15:35:23
Cześć!
Postanowiłem ostatnio napisać prosta siec Klient-serwer ,ale natknąłem się na pewien problem.
Otóż wysłana wiadomość przez klienta nie dociera do serwera.

Jeżeli znalazłby ktoś błąd w kodzie żródłowym lub wiedziałby o innym problemie z poza programów byłbym bardzo zadowolony.
Obydwie aplikacje otwieram na tym samym komputerze przez co jest to samo ip;

Poprawiony Klient:
C/C++
#include <SFML/Network.hpp>
#include <iostream>
#include <conio.h>
using namespace std;
using namespace sf;
int main()
{
   
   
   
    sf::IPAddress Adres = sf::IPAddress::LocalHost;
    sf::SocketTCP Klient;
    unsigned short Port = 45677;
    bool polaczono = false;
    char buffer[ 7 ];
   
    if( Klient.Connect( Port, Adres ) == Socket::Done )
    {
       
        cout << "Polaczono" << endl;
        polaczono = true;
       
    } else
    {
        cout << "nie polaczono" << endl;
        polaczono = false;
    }
   
    while( polaczono == true )
    {
        cin >> buffer;
        if( Klient.Send( buffer, sizeof( buffer ) ) != sf::Socket::Done )
        {
           
        }
        cout << "wyslane " << buffer << endl;
    }
   
    system( "PAUSE" );
    return 0;
}

Poprawiony Serwer:
C/C++
#include <SFML/Network.hpp>
#include <iostream>
#include <conio.h>
using namespace std;
using namespace sf;
int main()
{
   
   
   
   
    sf::IPAddress Sender;
    SocketTCP Klient, sluchacz;
    unsigned short Port = 45677;
    bool polaczono = false;
    char buffer[ 7 ];
    std::size_t Received;
   
   
    if( !sluchacz.Listen( Port ) )
    {
        std::cout << "Blad" << std::endl;
    }
    if( sluchacz.Accept( Klient, & Sender ) == Socket::Done )
    {
        cout << "Nawiazano nowe polaczenie : " << Sender << endl;
        polaczono = true;
       
    } else polaczono = false;
   
    while( polaczono == true )
    {
        if( sluchacz.Receive( buffer, sizeof( buffer ), Received ) == Socket::Done )
        {
            cout << "wiadomosc :" << buffer << endl;
        }
    }
    system( "PAUSE" );
    return 0;
}
P-99944
RazzorFlame
» 2013-12-23 17:27:46
Wywal funkcje Connect (na cliencie) i funkcje Accept (na serwerze) przed pętle. Łącz się tylko raz. I tak nie używasz nieblokujących socketów więc nie ma potrzeby łączenia się tyle razy. Tak poza tym upewnij się że włączasz najpierw serwer potem dopiero client.
I nie pisz "klijent" bo to wkurza i jest nieprawidłowe. Pisze się Klient (pol.) lub Client (ang.).
P-99965
MrPoxipol
» 2013-12-23 18:03:40
Jeśli piszesz po polsku to 'Client' też jest niepoprawne. Używajmy naszego pięknego języka :) Część rzeczy się nie spolszcza, ale takie dla których istnieje powiedzmy 'normalne' tłumaczenie pasowałoby pisać po polsku ;). Ładnie to wtedy wygląda.
P-99968
DanielSC
Temat założony przez niniejszego użytkownika
» 2013-12-23 18:52:56
Dobrze postaram się do waszych rad stosować , ale nie rozwiązują one mojego problemu.
Jeśli program jest dobrze napisany to w czym innym może tkwić problem z odebraniem wiadomości od Clienta?
Client połaczy się z serwerem , ale po wysłaniu wiadomości Serwer jej nie otrzymuje.


Edit:
Czyli problem może tkwić w tej linijce :
C/C++
if( sluchacz.Receive( buffer, sizeof( buffer ), Received ) == Socket::Done )
{
    cout << "wiadomosc :" << buffer << endl;
}

ale nie jestem w stanie go zlokalizować i tu moja prożba do was.
P-99977
RazzorFlame
» 2013-12-23 21:45:44
Pokaż aktualny kod. Napisałem co powinieneś zrobić.

@MrPoxipol
Jeśli piszesz po polsku to 'Client' też jest niepoprawne
Czy ja napisałem, że jest poprawne? Wyraźnie i jasno napisałem że Klient w j. polskim a Client w j. angielskim. To, że używam zamiennie tych słów to tylko przyzwyczaja i oswaja mnie z j. angielskim, o którym ostatnio gdzieś na forum napisałeś że:
Chcesz programować bez używania angielskiego? Mylisz się.
Oczywiście nie mówię, że to jest niepoprawne ale zwracając na takie rzeczy uwage możesz sie przyczepić też do skrótów powszechnie używanych typu "etc." bądź "ofc." lub "IMO".
P-100003
pekfos
» 2013-12-23 22:18:03
Chcesz programować bez używania angielskiego? Mylisz się.
Można. Ale bez znajomości angielskiego już nie.

"etc." bądź "ofc." lub "IMO".
etc nie jest z angielskiego, btw ;)
P-100011
RazzorFlame
» 2013-12-24 11:54:32
@UP czy ja powiedziałem, że etc. jest z angielskiego? Kiedy MrPoxipol napisał, żeby używać naszego pięknego języka przyczepiając się do obcojęzycznego wyrazu to wymieniłem pare skrótów obcojęzycznych używanych powszechnie w Polsce.

C/C++
if( sluchacz.Receive( buffer, sizeof( buffer ), Received ) == Socket::Done )
{
    cout << "wiadomosc :" << buffer << endl;
}
Do odbierania używaj socketu Klient a nie sluchacz.
P-100027
DanielSC
Temat założony przez niniejszego użytkownika
» 2013-12-24 11:59:37
Dzięki wielkie za pomoc już wszystko działa jak należy.Ciesze się też ,że z tego tematu wywiązała się taka piękna dyskusja na temat języka polskiego :D
P-100028
« 1 »
  Strona 1 z 1