Отправка файла со стороны сервера на сторону клиента с использованием TCP в C ++ - PullRequest
1 голос
/ 05 мая 2011

Теперь это немного больше запроса, так как я не могу найти любой простой и прямой пример для этого.

Проблема: я хочу отправить файл со стороны сервера на сторону клиента.

Когда сервер уже подключен и прослушивает порт, а клиент запрашивает файл (имя файла принимается в качестве параметра с IP-адресом сервера, таким как 127.0.0.1 и номер порта). и затем начинается процесс передачи, пока файл не будет скопирован.

Также может кто-нибудь включить, как я могу измерить среднюю скорость передачи на стороне сервера?

Кстати: я использую Linux x86 Ура, echo9

Ответы [ 3 ]

4 голосов
/ 05 мая 2011

Проверка Руководство Биджа по сетевому программированию . Там много примеров, показывающих, как реализовать архитектуру клиент / сервер с использованием сокетов и передавать данные между ними.

EDIT

Проверьте пункты 8 и 9 из этого учебного пособия для полного примера на клиент / сервер. Обратите внимание, что в пункте 8 сервер отправляет клиенту char*:

send(fd2,"Welcome to my server.\n",22,0); /* send to the client welcome message */

В данном случае это строка "Welcome to my server.\n", а следующий параметр - это размер строки, которую вы хотите отправить.

Когда вам нужно отправить данные из файла, это то же самое: сначала вам нужно прочитать данные из файла и сохранить их в char* buffer;, который вы вручную распределили с помощью malloc (),

Примерно так:

char* buffer;
buffer = (char*) malloc(1024); // let's say your file has 1KB of data

/* insert here the code to read data from the file and populate buffer with it */

send(fd2, buffer, 1024,0);
2 голосов
/ 05 мая 2011

Вот простой протокол:

CLIENT                   SERVER
                         socket(), bind(), listen()
socket(), connect()
                         accept()
send("GET filename\n")
                         recv(buffer)
                         inspect buffer, parse filename (stop at space or \n),
                         open() file.
                         sendfile(file, socket)
                         close(socket)
                         close(file)
 recv(socket)
 close()

Этот протокол имеет то преимущество, что он может использовать ваш веб-браузер в качестве клиента и ваш веб-сервер в качестве хоста, при условии, что каждый из них поддерживает HTTP/0.9.

Вот клиент .

0 голосов
/ 05 мая 2011

Возможно, вы захотите использовать sendfile (2) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...