Ситуация такая. При подключении клиента через ServerSocket accept() создается новый поток. Сначала идет проверка версии клиента (клиент при подключении шлет свою версию) и если версия совпадает, то : текущий поток блокируется для приема сообщений (readLong, например). Специфика такова, что клиенту может быть отправлено сообщение сервером, притом, асинхронно (например, другой клиент совершил некое действие, о котором должны быть информированы несколько других клиентов).
С Java работаю достаточно недавно, поэтому есть вопрос, как заблокировать поток записи, на ожидание сообщения, например event-driven.. т.е. понятно, что в C я бы воспользовался mutex-ом или условной блокировкой. Когда сообщение для потока приходит - вызывается процедура, которая инициирует разблокировку пишущего потока... вообщем как-то так ;-)
Вот бы пример какой простой посмотреть, например, чата на вроде IRC-сервера.
Говорят, вроде как копать в сторону NIO....
p.s. я так понимаю, что пишущий поток можно блокировать через this.wait(), потом вызывать например так:
[code]
synchronized(this) {
OutThread thr=outThreads.get(connid).notify();
thr.sendPacket(myBytesArray);
}
[/code]
Где, OutThreads есть ArrayList<OutThreads>, connid - идентификатор соединения, myBytesArray - byte byBytesArray[]...
Но, как-то по моему - кривовато