| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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, 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 | ||
|
| Автор: Romikgy 26.12.2005, 16:49 | ||
Тобишь нужен только асинхронный сокет, и у
|
| Автор: Snowy 26.12.2005, 16:51 |
| Угу. По крайней мере мне о них неизвестно |
| Автор: Romikgy 26.12.2005, 17:02 |
| сиба |