|
|
|
Вопрос по сокетам
|
|||
|---|---|---|---|
|
#18+
Я Использую асинхронные сокеты. Клиент серверу передаёт некокоторые данные которые формирует как {команда данные r\n\}, То есть заканчивается стандартным флагом перенос каретки, конец строки. Возможно ли такая ситуация, что переданная {команда данные r\n\}, прийдёт на асинхронные(хотя не имеет значения) по частям, припустим: {команда }потом {данные r\n\} ?...то есть я сначала получу {команду} с потока а потом {данные r\n\} (или даже на более мелкие сообщения), или целостность преданного сообщения контролируется самим протоколом ? Знаю что ситуация когда передаёшь подряд несколько сообщения, а они приходят на конечный сокет в одном сообщении возможна. PS Меня не интересует уровень пакетов, только уровень ссобщений который передаются/принимаются комадами send/resive ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2008, 21:35 |
|
||
|
Вопрос по сокетам
|
|||
|---|---|---|---|
|
#18+
Да, сообщение может прийти по частям (TCP). Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2008, 21:46 |
|
||
|
Вопрос по сокетам
|
|||
|---|---|---|---|
|
#18+
Какой протокол используется? Если ТСР, например, то возможно по частям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2008, 22:05 |
|
||
|
Вопрос по сокетам
|
|||
|---|---|---|---|
|
#18+
D-TAU...или целостность преданного сообщения контролируется самим протоколом ?...только уровень ссобщений который передаются/принимаются комадами send/resive судя по поведению - уровень протокола TCP/IP ? Да, это потоковый протокол. Т.е. клиенту предоставляется двунаправленная труба и всё. Целоснтность передачи и обязательность доставки (т.е. сто пудово ничего не пропадёт) - ГАРАНТИРУЕТСЯ самим протоколом. А вот гранулярность данных - об этом в протоколе НИЧЕГО НЕ сказано. Т.е. (в зависимости от тайм аутов и ситуации в сети!) Вы можете получить именно такую картину как вы описали...т.е. прийти сразу кучей несколько посылок удалённого клиента, либо прийти половина от сообщения и потом дослаться кусочек ышо с другим началом данных... Можно видеть под отладчиком гранулярность передачи, но(!) и это ОЧЕНЬ ВАЖНО(!) нужно понимать что при уменьшении времени на обработку данных картина может резко измениться. Так например эти проблемы часто возникют при ударном тестировании системы, когда программист этих нюансов не учёл...увы это одна из самых распространённых ошибок юзанья TCP слоя... при использовании данного протокола надо представлять его как потоки на ввод и на вывод...вот собственно и всё... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2008, 20:18 |
|
||
|
Вопрос по сокетам
|
|||
|---|---|---|---|
|
#18+
И ещё один вопрос: Как определить свободный порт в системе, желательно на C#, или есть какаято Win API функция ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2008, 14:19 |
|
||
|
Вопрос по сокетам
|
|||
|---|---|---|---|
|
#18+
попробовать сделать порту bind(), если нет ошибки -не занят, если что-то вроде EINVAL - то используется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2008, 14:33 |
|
||
|
Вопрос по сокетам
|
|||
|---|---|---|---|
|
#18+
--null--попробовать сделать порту bind(), если нет ошибки -не занят, если что-то вроде EINVAL - то используется плохой способ, в случае, если кто-то уже прибиндился к конкретному адресу, ошибки не будет. на c# - просто создайте IPEndPoint(0,0) После Bind - номер порта, назначенный системой будет в LocalEndPoint сокета ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2008, 16:21 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=144&tid=1345312]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 349ms |

| 0 / 0 |
