[英]java: Single socket on read write operation. Full duplex
我必須實現使用特定的源端口發送數據,並同時偵聽該端口。 全雙工。 有誰知道如何在Java上實現它。 我試圖創建用於偵聽套接字輸入流的單獨線程,但是它不起作用。 我無法將ServerSocket和客戶端套接字綁定到相同的源端口,並且與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,全雙工非常簡單:
Socket
創建一個Channel
Selector
的select()
方法進行睡眠 這樣,每次有空間時,您將完全加載輸出緩沖區,並同時從傳入的緩沖區中讀取數據(嗯,單線程,但不必完成寫入就可以開始讀取等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.