SFML NETWORK - przejrzenie kodu

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/d/0B6twcSwkjnvzYjhaMGprd3FMams/view?usp=sharing

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

0

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

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. :/

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.

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.

0

Zapisuj tyle danych ile otrzymałeś?

0

Nie było pytania :)

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?

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