0
我正在嘗試編寫一個既是TCP客戶端又是TCP服務器的程序,以便在分佈式網絡上廣播消息。在我能夠將這些程序的多個實例連接在一起後,我發現我無法從套接字讀取數據。我簡化了實現,但仍然有同樣的問題。一個類中的TCP客戶端/服務器
簡化代碼如下:
public class Server {
public static void main(String[] args){
try {
ServerSocket ssocket = new ServerSocket(1234);
Socket socket = new Socket("localhost", 1234);
socket = ssocket.accept();
String data = "Hello World";
PrintWriter out;
out = new PrintWriter(socket.getOutputStream(), true);
System.out.print("Sending string: '" + data + "'\n");
out.print(data);
out.flush();
BufferedReader in = new BufferedReader(new
InputStreamReader(((Socket) socket).getInputStream()));
System.out.print("Received string: '");
while (!in.ready()) {}
System.out.println(in.readLine());
System.out.print("'\n...");
in.close();
} catch (UnknownHostException e2) {
e2.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
運行時我收到以下輸出代碼:
Sending string: 'Hello World'
Received string: '
爲什麼我無法讀取輸入流?
感謝芽,我的解釋是,您只需要一個服務器和客戶端之間的一個套接字,並且ServerSocket返回相同的套接字。 我試着實施以下... Socket Csocket = new Socket(「localhost」,1234); Socket Ssocket = ssocket.accept(); out = new PrintWriter(Ssocket.getOutputStream(),true); (新的InputStreamReader(((Socket)Csocket).getInputStream())); 而且它仍然不起作用我假設在真正的實現中我將不得不使用線程,但我認爲我應該能夠在沒有線程的情況下使其工作。 – longshorts