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:
#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:
#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; }
|
|
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.). |
|
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. |
|
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 : 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. |
|
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". |
|
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 ;) |
|
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.
if( sluchacz.Receive( buffer, sizeof( buffer ), Received ) == Socket::Done ) { cout << "wiadomosc :" << buffer << endl; }
|
Do odbierania używaj socketu Klient a nie sluchacz. |
|
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 |
|
« 1 » |