Форум программистов, компьютерный форум CyberForum.ru

Сокеты, клиент-сервер - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Структура и мматрица http://www.cyberforum.ru/cpp-beginners/thread718209.html
Помогите пожалуйста с написанием программы под С++ вот задача .Создать структуру которая отображала бы средние бал группы .Массив двойной тоесть матрица .Размерность массива это количество студентов на предмет . Заполнение матрицы происходит случайным образом но ограничена . Эллемменты матрицы ограничены. Добавлено через 1 час 1 минуту Вот мой примерный код #include<iostream> ...
C++ вывод графики (нарисовать букву) нарисовать букву Я(линиями) чтобы можно было вращать, пожалуйста)) Добавлено через 42 секунды либо исходник рисующий 2 линии (верт и горизонтальную) http://www.cyberforum.ru/cpp-beginners/thread718207.html
C++ конкатенация 2х строк? подскажите новичку в с++
Как получить строку s, являющую собой конкатенацию двух строк s0 и s1?
C++ Ошибка кода калькулятора матриц
При компиляции выскакивают ошибки помогите плиз. //--------------------------------------------------------------------------- #include <iostream.h> #include <conio.h> #include<stdio.h> #include <iomanip.h> #include <windows.h> #include <math.h> #include<stdlib.h>
C++ рекурсия в с++ ( ?: = if() else) http://www.cyberforum.ru/cpp-beginners/thread718192.html
Подскажите, пожалуйста, как сделать с помощью рекурсивной функции? int sum (int *arr, size_t size) { return size ? *arr + sum (arr + 1, size - 1) : 0; }
C++ Как подсчитать частоту вхождения слов в текст.файле? Нужно создать программу, которая подсчитает частоту вхождения слов в текстовом файле. Помогите пожалуйста! :help: подробнее

Показать сообщение отдельно
vxg
Модератор
 Аватар для vxg
2658 / 1669 / 156
Регистрация: 13.01.2012
Сообщений: 6,214
04.12.2012, 11:22     Сокеты, клиент-сервер
сервер создает сокет функцией socket и связывает его с адресом функцией bind. адрес указываемый при связывании является адресом одного из сетевых адаптеров сервера. адрес "0" используется для указания всех установленных на машине сетевых адаптеров. порт указываемый при связывании используется для приема запросов на соединение от клиентов. сервер начинает слушать порт ожидая клиентов функцией listen.
-
клиент создает сокет функцией socket и соединяется с сервером функцией connect. адрес указываемый при соединении является адресом сервера (адресом любого из сетевых адаптеров сервера через который мы можем с ним соединиться). порт указываемый при соединении является портом сервера (портом который слушает сервер).
-
сервер принимая соединение от клиента функцией accept получает от системы новый сокет (для каждого клиента). порт, используемый при автоматическом создании сокета выделяется системой и не совпадает с портом который слушает сервер.
-
сервер и клиент обмениваются данными при помощи функций send/recv. кто из них пошлет данные первым, как участники обмена будут на них реагировать и что они будут делать между посылками определяется протоколом и логикой работы программы. как правило функция сервера заключается в обработке данных: клиент посылает серверу запрос, сервер его обрабатывает и посылает клиенту ответ. если используется такая схема, то после приема соединения сервер вызывает функцию recv ожидая входящие данные, а клиент вызывает функцию send отправляя их серверу. после этого они меняются местами: сервер подготовив данные вызывает функцию send, а клиент должен ждать ответа функцией recv. если сокеты блокирующие вызовы данных функций приостановят выполнение программы до момента возврата из функции. обычно для сервера это нежелательно. следует либо использовать функцию select для проверки наличия входящих данных (вызов recv производится только если данные есть) либо использовать неблокирующие сокеты которые при отсутствии входящих данных не ожидают, а сразу возвращают код ошибки (в этом случае функция recv будет вызываться периодически до тех пор пока данные не будут получены). перевод сокета в неблокирующий режим производится функцией ioctlsocket.
-
разрыв соединения может быть произведен любым из участников функцией closesocket. если при этом другой участник обмена вызовет функцию recv она вернет ноль, функция send вернет ошибку. реакция участников на разрыв соединения определяется протоколом и логикой работы программы. как правило если сервер получает ноль при вызове recv он считает что клиент штатно отключился, если сервер при вызове recv/send получает код ошибки он считает что клиент отключился нештатно. если зафиксировано отключение клиента сервер закрывает сокет клиента со своей стороны и освобождает принадлежащие клиенту ресурсы. в свою очередь если клиент получил ошибку при вызове функции send/recv он считает что связь с сервером была потеряна, закрывает сокет и может попытаться произвести повторное подключение. некоторые протоколы подразумевают схему "подключение со стороны клиента-запрос от клиента-ответ от сервера-отключение со стороны сервера". в этом случае факт разрыва соединения (естественно на определенном этапе) является частью процедуры обмена данными. однако для таких протоколов перед отключением необходимо позаботится о том что бы доставка состоялась при помощи функции shutdown. впрочем для других схем такой вызов тоже крайне желателен.
=
1 - отключается он или нет зависит от протокола. послушиваемый сервером порт всегда свободен. автоматически выделенный порт клиента на стороне сервера всегда занят пока клиент к нему подключен.
2 - нет, каждый клиент получает свой порт
3 - данные приходят на сокет. сокет выделяется для каждого подключившегося клиента. что делать с данными именно этого клиента и как идентифицировать клиентов определяется протоколом и логикой работы программы.
 
Текущее время: 13:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru