SFML NETWORK - przejrzenie kodu

Odpowiedz Nowy wątek
2015-01-05 18:37
Autor
0

Chcę przesłać tablice

char* message

o treści "message".
Problem jest taki, że gdy je wyśle to klient odbiera tylko 4 znaki nie wiem czemu.
Przejrzałem to kilka razy, nie wiem co jest nie tak.
Czy mógłby ktoś przejrzeć kod? Może komuś coś się rzuci w oczy bo ja nie wiem gdzie jest problem.
http://4programmers.net/Pastebin/3704
Wrzucam plik exe.
https://drive.google.com/file[...]aMGprd3FMams/view?usp=sharing

Za każdą pomoc będę wdzięczny.

Pozostało 580 znaków

2015-01-05 18:48
0

sizeof(wskaźnik) zwraca ci ROZMIAR WSKAŹNIKA czyli u ciebie 32bity / 4 bajty. Dlugość C-stringa to strlen(string)


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.
edytowany 2x, ostatnio: Shalom, 2015-01-05 18:48

Pozostało 580 znaków

2015-01-05 19:22
Autor
0

Jeśli dobrze zrozumiałem (nie gwarantuje) to chciałeś bym zamienił na:

message = new char[16]; ///Na razie jest to sztywno  ustawiane
    if (socket.receive(message, strlen(message), received) != sf::Socket::Done)
        return;

Jednak teraz odbieram teraz tylko 3 znaki. :/

Pozostało 580 znaków

2015-01-05 19:45
0

Nie nie nie. Nic nie rozumiesz ;] Ty WYSŁAŁEŚ tylko 4 znaki bo to przy SEND masz błąd.
sizeof(tablica) zwraca rozmiar tablicy a sizeof(wskaznik) zwraca rozmiar wskaźnika (czyli u ciebie 4 bajty). Ty przy wysyłaniu masz WSKAŹNIK więc sizeof na nim zwrócił ci 4. Przy odbieraniu masz tablicę więc sizeof zwracał ci poprawny rozmiar.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.
edytowany 1x, ostatnio: Shalom, 2015-01-05 19:45

Pozostało 580 znaków

2015-01-06 20:29
Autor
0

Dobra załapałem. A jak mam wyśle i odbiorę wiadomość mniejsza niż przeznaczona do tego tablica to czy tablica w trakcie działania programu wypełni się śmieciami (losowymi wartościami). Chciałbym tego uniknąć - co zrobić? Bo wiadomość chcę zapisywać do pliku. i nie chciałbym dziwnych znaków.

Pozostało 580 znaków

2015-01-06 20:31
0

Zapisuj tyle danych ile otrzymałeś?

Pozostało 580 znaków

2015-01-06 21:12
Autor
0

Nie było pytania :)

Pozostało 580 znaków

2015-01-12 17:41
Autor
0

Znowu mam problem z tablicami.

Wysyłam tablice zadeklarowana w klasie i zapisuje do niej odebrane dane.
Ale chciałem napisać funkcje, która wysyła tablice podaną jako argument funkcji.
Zrobiłem to tak, że
deklaruje tablice,

char * buffer;

nadaje jej konkretny rozmiar,

buffer = new char [length];

i wysalam funkcją.

tcp.Send(file.buffer);

Tu taj ciało funkcji

void TCP::Send(char* mess)
{
    if (socket.connect(server, port) != sf::Socket::Done)
        return;
    std::cout << "Polaczono z serwerem: " << server << std::endl;
 
    if (socket.send(mess, strlen(mess)) != sf::Socket::Done) ///strlen daje tylko 4 znaki?
        return;
    //std::cout << mess << std::endl;
    std::cout << "Wiadomosc wyslano: <" << strlen(mess) << ">" << std::endl;
}

Ale wysyłają się tylko cztery znaki. Znowu chodzi o coś z wielkością wskaźnika. Pomożecie?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0