Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Работа с Socket-ом


Автор: Romikgy 22.12.2005, 12:13
Вопрос вот в чем , если я создаю сокет, в отдельном потоке начинаю крутить recv, смогу ли я безболезнено , в основном потоке этому же сокету сказать send, и насколько быстро исполнится передача данных?

Автор: Snowy 22.12.2005, 12:34
Думаю, что нет.
И аккуратней и надежней будет делать это через синхронизацию.

Автор: Romikgy 22.12.2005, 12:39
Цитата(Snowy @ 22.12.2005, 11:34)
через синхронизацию

точнее плз

Автор: Snowy 22.12.2005, 14:28
Выстраиваешь очередь того, что нужно отправить в сокет.
Поток сокета периодически вызывает синхронизацию, в моменты, когда неактивен.
В синхронизации проверяет, а не пуста ли очередь.
Если не пуста, то берет данные, чистит очередь, уходит из синхронизации и начинает передачу данных.
Добавлено @ 14:30
Очередь проще всего выстраивать как TMemoryStream.
При синхронизации брать все данные единым блоком.

Автор: Romikgy 22.12.2005, 14:40
Смысл в том , что если в потоке я вызову recv, а данных в буфере сокета не будет , он их будет ждать бесконечно, или я не прав?

Автор: Snowy 22.12.2005, 16:53
Зависит от того, как ты работаешь с сокетом.

Автор: Romikgy 22.12.2005, 17:46
??? а как можно, как везде описано так и работаю

Автор: Snowy 22.12.2005, 18:57
Можно через Socks, через IdTCPClient, через ISC, прочие компоненты. Да мало ли вариантов...

Автор: Romikgy 23.12.2005, 10:01
Через WinSock2

Автор: Snowy 26.12.2005, 12:06
Цитата
If no incoming data is available at the socket, the recv call blocks and waits for data to arrive according to the blocking rules defined for WSARecv with the MSG_PARTIAL flag not set unless the socket is nonblocking. In this case, a value of SOCKET_ERROR is returned with the error code set to WSAEWOULDBLOCK. The select, WSAAsyncSelect, or WSAEventSelect functions can be used to determine when more data arrives.

Автор: Romikgy 26.12.2005, 16:49
Тобишь нужен только асинхронный сокет, и у
Цитата(Snowy @ 26.12.2005, 11:06)
recv
нет никаких тайаутов, правильно?

Автор: Snowy 26.12.2005, 16:51
Угу.
По крайней мере мне о них неизвестно

Автор: Romikgy 26.12.2005, 17:02
сиба

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)