Я должен реализовать отправку данных с определенным исходным портом и в то же время прослушивать этот порт. Полный дуплекс. Кто-нибудь знает, как реализовать его на java. Я попытался создать отдельный поток для прослушивания во входном потоке сокета, но он не работает. Я не могу связать серверный сокет и клиентский сокет с одним и тем же исходным портом и тем же самым с netty. Это там какое-то решение для тупых дуплексов?
init(){
socket = new Socket(InetAddress.getByName(Target.getHost()), Target.getPort(), InetAddress.getByName("localhost"), 250);
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
}
private static void writeAndFlush(OutputStream out, byte[] b) throws IOException {
out.write(b);
out.flush();
}
public class MessageReader implements Runnable {
@Override
public void run() {
//this method throw exception EOF
read(in);
}
private void read(DataInputStream in){
while (isConnectionAlive()) {
StringBuffer strBuf = new StringBuffer();
byte[] b = new byte[1000];
while ((b[0] = bufferedInputStream.read(b)) != 3) {
strBuf.append(new String(b));
}
log.debug(strBuf.toString());
}
}
}
Я столкнулся с тем же вопросом и решил ответить сам. Я хотел бы поделиться с вами ребятами код репо. Это очень просто, вы можете получить представление о том, как заставить ваши вещи работать. Это сложный пример. Шаги случайно выглядят как решение Ordous.
https://github.com/khanhhua/full-duplex-chat
Не стесняйтесь клонировать! Это моя домашняя работа в выходные.
То, что вы пытаетесь сделать, довольно странно: ServerSocket
- полностью реализованный сокет, который принимает соединения, обрабатывает свои собственные сообщения, и вы определенно не можете копировать другой сокет поверх него.
Полный дуплекс довольно прост в использовании с NIO:
Channel
для вашего Socket
в неблокирующем режимеSelector
select()
Таким образом, вы будете полностью загружать исходящий буфер каждый раз, когда есть пространство и чтение из входящего в одно и то же время (ну, один поток, но вам не нужно заканчивать запись, чтобы начать чтение и т.д.).
Основная тема:
Классы:
your
порт ... вы пишете на порт целевой машины, если вы не говорите, что пишете для себя? Начните со Слушателя ...