2011-12-21 3 views
3

Возможно ли иметь сервер и клиент с одним сокетным соединением и отправлять данные в обоих направлениях одновременно? Я имею в виду, что и сервер, и клиент одновременно читают и записывают (2 потока в каждом процессе)java socket full duplex

Редактирование: мне нужна «истинная» двусторонняя связь, а не связь с запросом и ответом. И клиент, и сервер должны иметь возможность писать одновременно.

Редактировать2: Бог, дама! Оно работает. Глупый я у меня был тупик между клиентом/сервером из-за записи в поток читателей! :) Спасибо

+0

Не совсем уверен, что это то, о чем вы просите, но оно, по крайней мере, связано и может вас заинтересовать: [другое java сокет full duplex questio] (http://stackoverflow.com/questions/6265731/do -java-sockets-support-full-duplex) –

+0

У вас есть пример, как это сделать. Мне нужны такие вещи. – Diyko

ответ

1

TCP-соединение - это полнодуплексный поток байтов, поэтому да, вы можете читать и записывать в один и тот же сокет одновременно, хотя вам, безусловно, не нужно прибегать к потокам для двусторонней связи ,

+1

Мне нужна «настоящая» двусторонняя связь, а не связь с запросом/ответом. И клиент, и сервер должны иметь возможность писать одновременно. – Stig

+1

Без потоков вы не можете добиться полнодуплексной функциональности. Или вы можете отправить, или вы можете ждать ответа. Вы не можете делать все вместе. Таким образом, без потоков он будет полудуплексным. Можно либо отправить, либо получить (или дождаться получения) в любой момент времени. –

+0

Я бы все равно его запустил. Также будет проблематично чередование, когда читать нечего (хотя это можно было бы обработать с таймаутами) – Stig

1

Да, кажется, использует Threads каждый для отправки и приема с обеих сторон. Таким образом, одно соединение сокета может это сделать.