-2
我創建了我的第一個測試應用程序來實現套接字服務器。我有一些問題讓客戶端接收數據,但服務器獲取數據就好了。這裏是服務器:Java Socket客戶端沒有收到數據
ServerSocket socket = new ServerSocket(11111);
System.out.println("CREATING SERVER...");
while (true) {
Socket SERVER_WORK = socket.accept();
BufferedReader clientIN = new BufferedReader(new InputStreamReader(SERVER_WORK.getInputStream()));
PrintWriter outSend = new PrintWriter(SERVER_WORK.getOutputStream());
String ClientSTR = clientIN.readLine();
System.out.println("Client 1: " + ClientSTR);
String toClient = "Hello";
outSend.write(toClient + '\n');
}
這裏是客戶端:
System.out.println("CONNECTING TO SERVER...");
while (true) {
Socket clientSocket = new Socket(server, 11111);
BufferedReader fromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
DataOutputStream toServere = new DataOutputStream(clientSocket.getOutputStream());
Scanner in = new Scanner(System.in);
toServere.write(in.nextLine().getBytes());
if (fromServer.ready())
System.out.println(fromServer.readLine());
clientSocket.close();
}
一切工作正常,除了客戶端接收數據。
嘗試在服務器上使用'outSend.flush()'以確保字節實際發送而不是保存在緩衝區中。 http://stackoverflow.com/questions/2340106/what-is-the-purpose-of-flush-in-java-streams –
你的「服務器」是一個客戶端,而你的「客戶端」是一個服務器。第一段代碼永遠不會關閉套接字。 'ready()'調用是毫無意義的,應該刪除。您正在讀取第一段代碼中的行,但不會在第二段代碼中發送行。 – EJP