我必須實現發送數據與特定的源端口,並在同一時間聽該端口。全雙工。有誰知道如何在java上實現它。我試圖創建單獨的線程來偵聽套接字輸入流,但它不起作用。我無法將ServerSocket和客戶端套接字綁定到同一個源端口,而netty也是如此。 它有沒有任何解決方案沉悶的雙工?java:讀取寫入操作時的單個套接字。全雙工
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());
}
}
}
當您寫入特定的端口時,它不是'您的'端口..您正在寫入目標機器端口,除非您說您正在寫信給自己?從監聽器開始...... –
新的Socket(remoteAddress,remotePort,localAddress,localPort)。我需要監聽本地端口並同時從該端口發送消息。 ServerSocket不能發送消息。平原插座不能聽或至少我不知道如何實現它 – Diyko
你只需要一個插座讀寫。您可以調用[Socket.getInputStream](http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#getInputStream())進行讀取和[Socket.getOutputStream](http: //docs.oracle.com/javase/7/docs/api/java/net/Socket.html#getOutputStream())進行編寫。然而,從輸入流中讀取是一個阻塞調用,所以你可能希望在一個單獨的線程中完成。向我們展示一些您的代碼,以便我們可以看到您已經嘗試過的內容。 – sgbj