У меня есть TCP-сервер и TCP-клиент. Клиент передает сообщение и получает в ответ ту же строку. Что нужно изменить, чтоб возвращал сервера файл. То есть я указываю в клиенте имя файла, а сервер мне его возвращает, а если его нету, то сообщение о том что его нету.
Клиентская часть.
// Шаг 4 - чтение и передача сообщений
int nsize;
while ((nsize = recv(my_sock, &buff[0],
sizeof(buff) - 1, 0))
!= SOCKET_ERROR)
{
// ставим завершающий ноль в конце строки
buff[nsize] = 0;
// выводим на экран
printf("S=>C:%s", buff);
// читаем пользовательский ввод с клавиатуры
printf("S<=C:"); fgets(&buff[0], sizeof(buff) - 1,
stdin);
// проверка на "quit"
if (!strcmp(&buff[0], "quit\n"))
{
// Корректный выход
printf("Exit...");
closesocket(my_sock);
WSACleanup();
return 0;
}
// передаем строку клиента серверу
send(my_sock, &buff[0], nsize, 0);
}
Серверная часть
DWORD WINAPI SexToClient(LPVOID client_socket)
{
SOCKET my_sock;
my_sock = ((SOCKET *)client_socket)[0];
char buff[20 * 1024];
#define sHELLO "SOCKET PODKLUCHEN\r\n"
// отправляем клиенту приветствие
send(my_sock, sHELLO, sizeof(sHELLO), 0);
// цикл эхо-сервера: прием строки от клиента и возвращение ее клиенту
int bytes_recv;
while ((bytes_recv = recv(my_sock, &buff[0], sizeof(buff), 0)) &&
bytes_recv != SOCKET_ERROR)
send(my_sock, &buff[0], bytes_recv, 0);
// если мы здесь, то произошел выход из цикла по причине
// возращения функцией recv ошибки - соединение с клиентом разорвано
nclients--; // уменьшаем счетчик активных клиентов
printf("-disconnect\n"); PRINTNUSERS
// закрываем сокет
closesocket(my_sock);
return 0;
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники