Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 17.05.2021
Сообщений: 1

Нужен совет с Клиент-Сервером в TCP

17.05.2021, 18:15. Показов 7190. Ответов 1

Студворк — интернет-сервис помощи студентам
Всем здравствуйте, недавно начал изучать работу с сокетами и попалось задание на построение Клиент-Сервера (по протоколу TCP), так чтобы они могли общаться (идеале) или сервер мог получать сообщения от клиента.

Вообщем прошу помочь решить возникшую проблему: после компиляции клиента и сервера, запуска сначала сервера, а затем клиента; программа клиент выдаёт, что он "Connected", но не выводит "Hello"; Сервер выдаёт "Client accepted", но не воводи сообщение от клиента.

Из наработок пока есть вот что:
1) Клиент
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <memory>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio.hpp>
 
using namespace boost::asio; int main()
{
io_context context(1);
 ip::tcp::socket socket(context);
ip::tcp::endpoint ep(ip::address::from_string("127.0.0.1"), 60000);
socket.connect(ep);
std::cout << "Connected\n";
char message[256] = "Hello";
size_t bytesSent = socket.send(buffer(message, strlen(message) + 1));
char * incoming_message = new char[256];
socket.receive(buffer(incoming_message, 256));
std::cout << incoming_message << std::endl;
delete[] incoming_message;
return 0;
}
2) и Сервер
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <boost/asio/ip/tcp.hpp> 
#include <boost/asio.hpp> 
#include <boost/shared_array.hpp>
 
using namespace boost::asio; 
using namespace boost::system;
 
void on_read(ip::tcp::socket * socket, char * message, const error_code& ec, size_t read_bytes);
void on_accept(ip::tcp::socket * client_socket, ip::tcp::acceptor& acceptor, io_context& context, const error_code& ec);
 
int main()
{
io_context context;
ip::tcp::endpoint ep(ip::tcp::v4(), 60000);
ip::tcp::acceptor acceptor(context, ep);
ip::tcp::socket * client_socket = new ip::tcp::socket(context); 
acceptor.async_accept(*client_socket, 
                         std::bind(on_accept,
                         client_socket,
                         std::ref(acceptor),
                         std::ref(context),
                         std::placeholders::_1));
 
context.run();
 
return 0;
}
 
void on_read(ip::tcp::socket * socket, char * message, const error_code & ec, size_t read_bytes)
{
std::cout << message << std::endl;
socket->send(buffer(message, strlen(message) + 1)); socket->close();
delete socket; 
delete[] message;
}
 
void on_accept(ip::tcp::socket * client_socket, ip::tcp::acceptor& acceptor, io_context& context, const error_code& ec)
{
 
std::cout << "Client accepted\n";
/*std::string * incoming_message = new std::string(); incoming_message->reserve(256);*/
 
char * incoming_message = new char[256];
 
client_socket->async_read_some(buffer(incoming_message, strlen(incoming_message)), std::bind(on_read, client_socket, incoming_message, std::placeholders::_1, std::placeholders::_2));
 
ip::tcp::socket * new_client_socket = new ip::tcp::socket(context); acceptor.async_accept(*new_client_socket, std::bind(on_accept, new_client_socket,
std::ref(acceptor), std::ref(context), std::placeholders::_1));
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.05.2021, 18:15
Ответы с готовыми решениями:

TCP сервером! (нужен многопотоковый)
Необходимо обработать несколько пользователей, т.е. что бы несколько пользователей зашли на сервер. Проблемы возникают как только на сервер...

Нужен клиент для работы с асинхронным сервером
Добрый день всем. Задача: написать winForms приложение, подключающееся к асинхронному серверу по TCP. Приложение может слать на сервер...

Не получается прикрутить Штрих-М по TCP нужен совет
Здравствуйте, есть задача: использовать один ФР штрих на 2х компьютерах с установленной 1С 8.3 розница. Есть лицензия и ключ от сервера...

1
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
17.05.2021, 18:45
Code
1
2
char * incoming_message = new char[256];
client_socket->async_read_some(buffer(incoming_message, strlen(incoming_message)
Не сработает. Да и незачем.
Code
1
2
3
4
void on_read(ip::tcp::socket * socket, char * message, const error_code & ec, size_t read_bytes)
{
std::cout << message << std::endl;
socket->send(buffer(message, strlen(message) + 1)
Та же тема. И опять же, незачем.

Скорее всего у тебя нулевая длинна получается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2021, 18:45
Помогаю со студенческими работами здесь

TCP server/client нужен ваш совет
хочу сделать прогу по типу чата. думаю, что лучше всего подойдут компоненты IdTCPServer и IdTCPClient а можно ли с их помощью...

Нужен совет по клиент-серверным БД Firebird
Всем привет! Начал разбираться с клиент серверными БД на основе сервера Firebird. Вопрос такой: у меня будет 5 таблиц сколько оптимально...

TCP-сервер и TCP-клиент. Клиент не находит файл.
Всем привет! Решил изучать передачу данных по сети и начал с освоения примера, приведённого в книге &quot;Visual C# 2008. Базовый курс...

Написать tcp-сервер, который играет в шахматы с другим tcp-сервером
Здравствуй, помогите в написании программы: Написать tcp-сервер, который играет в шахматы с другим tcp-серверов. Доска одномерная ...

Сцена зависает при запуске TCP-клиента, когда он подключен к TCP - серверу, при этом TCP-клиент полностью функционирует
Проблема описана в заголовке, и хотелось бы услышать ваше мнение, о том как можно решить проблему. Скрипт TCP-клиента на сцене: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru