|
|
|
Сокеты
|
|||
|---|---|---|---|
|
#18+
Нужно сделать обмен данными между двумя компами по локальной сети. Чтобы это сделать я использую сокеты. Есть программа "Передатчик"(устанавливает соединение и передает данные) и "Приемник"(разрешает соединение и принимает данные). Ситуация такая, если я устанавливаю соединение в передатчике, в приемнике разрешаю соединение, НО ДАННЫЕ НЕ ПРИНИМАЮ, то после того как мы передали декоторый объем данных с помощью функции Send сдедующая попытка передать данные функцией Send вызывает ошибку. Возникает вопрос, куда идут данные, которые мы передаем, но не принимаем? Наверное в какой-то буффер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 09:52 |
|
||
|
Сокеты
|
|||
|---|---|---|---|
|
#18+
В системные буферы. Они могут наполняться до предела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 10:13 |
|
||
|
Сокеты
|
|||
|---|---|---|---|
|
#18+
AkhВ системные буферы. Они могут наполняться до предела. А как определить размер системного буфера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 10:52 |
|
||
|
Сокеты
|
|||
|---|---|---|---|
|
#18+
и сколько свободного места там осталось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 10:54 |
|
||
|
Сокеты
|
|||
|---|---|---|---|
|
#18+
Pasha_oВозникает вопрос, куда идут данные, которые мы передаем, но не принимаем? Наверное в какой-то буффер? Данные просто не передаются, но из-за асинхронности сокетов ошибка фиксируется не сразу. Если бы данные где-то копились, это был бы легкий способ подвесить сервер из клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 11:00 |
|
||
|
Сокеты
|
|||
|---|---|---|---|
|
#18+
Pasha_o AkhВ системные буферы. Они могут наполняться до предела. А как определить размер системного буфера? А оно тебе надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 11:11 |
|
||
|
Сокеты
|
|||
|---|---|---|---|
|
#18+
pandrew Pasha_oВозникает вопрос, куда идут данные, которые мы передаем, но не принимаем? Наверное в какой-то буффер? Данные просто не передаются, но из-за асинхронности сокетов ошибка фиксируется не сразу. Если бы данные где-то копились, это был бы легкий способ подвесить сервер из клиента. Откуда же забираются данные при вызове recv? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 11:13 |
|
||
|
Сокеты
|
|||
|---|---|---|---|
|
#18+
AkhОткуда же забираются данные при вызове recv? :) Честно говоря recv не пользовал, но с сокетами дело имел плотно. Кратко: установка соединения - разрешение адреса через DNS и обмен несколькими пакетами. Передача с клиента: отправка пакетов по текущему соединению, с подтверждением о приеме, если адресат не принимает в течение таймаута, пакет просто теряется, соединение на клиенте признается разорванным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 11:31 |
|
||
|
Сокеты
|
|||
|---|---|---|---|
|
#18+
pandrew AkhОткуда же забираются данные при вызове recv? :) Честно говоря recv не пользовал, но с сокетами дело имел плотно. Кратко: установка соединения - разрешение адреса через DNS и обмен несколькими пакетами. Передача с клиента: отправка пакетов по текущему соединению, с подтверждением о приеме, если адресат не принимает в течение таймаута, пакет просто теряется, соединение на клиенте признается разорванным. Ну, собственно, сокеты тут ни при чем. Любой интерфейс обмена данными. Пока программа не вызвала функцию получения пакета, сам пакет находится в системном буфере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 11:38 |
|
||
|
Сокеты
|
|||
|---|---|---|---|
|
#18+
AkhНу, собственно, сокеты тут ни при чем...Да нет, разговор именно про сокеты. AkhПока программа не вызвала функцию получения пакета, сам пакет находится в системном буфере.В буфере сервера? Но ПК м.б. вообще выключен, или провод из сервера выдернут. На клиенте действительно существует небольшая буферизация перед отправкой, которая в частности приводит к нарезке посылки на пакеты, но для программиста она прозрачна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 11:58 |
|
||
|
Сокеты
|
|||
|---|---|---|---|
|
#18+
pandrew AkhНу, собственно, сокеты тут ни при чем...Да нет, разговор именно про сокеты. AkhПока программа не вызвала функцию получения пакета, сам пакет находится в системном буфере.В буфере сервера? Но ПК м.б. вообще выключен, или провод из сервера выдернут. На клиенте действительно существует небольшая буферизация перед отправкой, которая в частности приводит к нарезке посылки на пакеты, но для программиста она прозрачна. 1. Принцип один. 2. Тогда не будет ответа от севера. 3. Эта тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:10 |
|
||
|
Сокеты
|
|||
|---|---|---|---|
|
#18+
Еще один вопрос. Решил отслеживать какие же ошибки возникают при передачи. Почему если написать так: try { p_transmitterSocket->Send(TrBuffer, Size); .... } catch (...) { .... } то при возникновении ошибки выполнения функции Send, программа сразу выдает сообщение об этом, а не переходит в блок catch? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:31 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=57&tid=2030037]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
175ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 499ms |

| 0 / 0 |
