powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как разделить сообщения на клиент сервере
25 сообщений из 60, страница 2 из 3
Как разделить сообщения на клиент сервере
    #38510100
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trom,

по переменной client_socket у тебя тоже будут гонки.
Она также незащищена ничем.
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38510116
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trom,

Ты так же везде шлёшь бинарку, т.е. у тебя нифига не текстовый протокол, но буфера все печатаешь как симпольные, printf-ом.

Плохо кончится.
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38510153
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и вообще дофига других ошибок дурацких.
Любая из них может привести всё в неработоспособное состояние.
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38510196
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

переменную
nclients--; // уменьшаем счетчик активных клиентов
можно и удалить, она не очень важна

printf тоже только в режиме отладки нужен


А вот client_socket важна, с много поточностью почти не работал, можно пример в коде что с ней можно сделать чтобы не было проблем ?
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38510261
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromчто с ней можно сделать чтобы не было проблем ?
Передавать её в поток по значению, а не по ссылке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38510276
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovtromчто с ней можно сделать чтобы не было проблем ?
Передавать её в поток по значению, а не по ссылке.


+1
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38510594
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Как именно передать ее по значению?
Код: plaintext
1.
_beginthreadex(NULL,NULL,SexToClient,&client_socket,NULL,&thID);


компилируется

Код: plaintext
1.
_beginthreadex(NULL,NULL,SexToClient,client_socket,NULL,&thID);


уже нет

то есть client_socket можно передать только по ссылке
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38510946
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromMasterZiv,

Как именно передать ее по значению?
Код: plaintext
1.
_beginthreadex(NULL,NULL,SexToClient,&client_socket,NULL,&thID);


компилируется

Код: plaintext
1.
_beginthreadex(NULL,NULL,SexToClient,client_socket,NULL,&thID);


уже нет

то есть client_socket можно передать только по ссылке
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38511071
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromКак именно передать ее по значению?
RTFM typecast
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38511108
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovtromКак именно передать ее по значению?
RTFM typecast


дам подсказку :
этот параметр потока на самом деле не указатель, а просто машинное слово.
ос его не отрабатывает, а в неизменном виде передает функции потока.
главное, чтобы твои данные туда влезли.
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38511232
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Лучше в коде покажи как сделать, подсказка мне не помогла
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38511498
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trom,

_beginthreadex(NULL,NULL,SexToClient,(void *)client_socket,NULL,&thID );

и на приемной стороне аналогичное преобразование в обратную сторону.
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38511729
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Код: plaintext
1.
_beginthreadex(NULL,NULL,SexToClient,(void *)client_socket,NULL,&thID );


вот так скомпилилось. Но при запуске клиент сервера, сервер зависает.
На приемной стороне это где ? внутри функции ?
Что делать то, можно пример как преобразовать в обратную сторону?
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38511828
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromMasterZiv,

Код: plaintext
1.
_beginthreadex(NULL,NULL,SexToClient,(void *)client_socket,NULL,&thID );


вот так скомпилилось. Но при запуске клиент сервера, сервер зависает.
На приемной стороне это где ? внутри функции ?
Что делать то, можно пример как преобразовать в обратную сторону?

да, внутри функции потока.


обратное преобразование
socket = (int) thread_param;
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38512202
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
навараксал это всё по-нормальному...
получился такой полноценный Winsock-echo-server...
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38512513
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Спасибо теперь понятно!
Чуть попозже выложу свой код клиент сервера попроще.

Причесываю код, разделяю все на функции и возникли вопросы:
1) Нужно ли выделять разные порты если на компе будут работать две и больше программы сервера ?
Если нужно получается нужна отдельная прога на сервере, типо главный сервер который будет иметь порт известный всем клиентам и она будет распределять подключения от клиентов сообщая порт свободной программы сервера.

2) Как лучше сделать:
а) Клиент отправляет сообщение получает ответ и отсоеденяется .
б) Клиент постоянно подключен к серверу, все время работы программы клиента.
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38512529
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivнавараксалчто сделал? ;)
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38512611
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Нужно ли выделять разные порты если на компе будут работать две и больше программы сервера ?


как бы на одном порту они просто не смогут работать.



2) Как лучше сделать:
а) Клиент отправляет сообщение получает ответ и отсоеденяется .
б) Клиент постоянно подключен к серверу, все время работы программы клиента.


б)
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38513535
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,
Вынес подключение клиента к серверу в отдельную функцию и возник вопрос.
Для того чтобы клиент был подключен к серверу от начала запуска проги и до конца, если правильно понимаю переменную
Код: plaintext
1.
SOCKET mysocket;

нужно делать глобальной.
А как проверить что этой переменной уже присвоено какое то подключение к серверу ?
Чтобы сделать проверку о наличии подключения и если его нет или оно разорвано пере подключится.
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38513565
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для того чтобы клиент был подключен к серверу от начала запуска проги и до конца, если правильно понимаю переменную
Код: plaintext
1.
SOCKET mysocket;

нужно делать глобальной.


Нет, ты понимаешь неправильно.



А как проверить что этой переменной уже присвоено какое то подключение к серверу ?
Чтобы сделать проверку о наличии подключения и если его нет или оно разорвано пере подключится.



Сравнить её с "НУЛЁМ". Что для переменной SOCKET является нулём -- ещё вопрос, но я думаю, что если ты затрёшь её всю нулями, а после установки соединения проверишь, что там не всё нули, будет оно самое то.

Другой вариант -- переменную сделать указателем, проверять на NULL и выделять при установке соединения.
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38513575
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть тут только одна маленькая фигня: разрыв соединения (по любой причине) не приводит к
автоматическому обнулению переменной на что надеется ТС.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38513608
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromMasterZiv,
Вынес подключение клиента к серверу в отдельную функцию и возник вопрос.
Для того чтобы клиент был подключен к серверу от начала запуска проги и до конца, если правильно понимаю переменную
Код: plaintext
1.
SOCKET mysocket;

нужно делать глобальной.Неправильно.
Глобальность переменной для этого будет полезна, но она не гарантирует того что коннект будет существовать.

tromА как проверить что этой переменной уже присвоено какое то подключение к серверу ?Функция socket() возвращает -1 если она не смогла создать сокет. Поэтому обычно и переменную держат в этом значении чтобы показать что сокет не существует. Но это просто рекомендация.
В 0 ее ставить для несуществующего сокета не стоит - ноль это обычно stdout. Вполне существующий поток.

tromЧтобы сделать проверку о наличии подключения и если его нет или оно разорвано пере подключится.Проверяй результат который тебе возвращают все твои send()/recv(). Если они упали с ошибкой - читай номер ошибки. И если это ошибка отсутствия коннекта - подключайся заново.
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38513613
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlФункция socket() возвращает -1
Под виндой тип SOCKET - unsigned.
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38513618
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlФункция socket() возвращает -1
Под виндой тип SOCKET - unsigned.Под виндой socket и WSASocket возвращают INVALID_SOCKET. Хочешь угадать чему оно равняется? :)
...
Рейтинг: 0 / 0
Как разделить сообщения на клиент сервере
    #38513620
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

В доке прямо написано, что не следует предполагать что INVALID_SOCKET приводится к -1.
...
Рейтинг: 0 / 0
25 сообщений из 60, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как разделить сообщения на клиент сервере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]