1
我試圖用echo回答客戶端消息,但我不知道如何去做。我的客戶端發送的消息,但後來我扭轉文件和程序不進行(卡符合客戶端 - 服務器消息交換 - Java中的套接字
DataOutputStream類出=新DataOutputStream類(clientSocket.getOutputStream());
服務器的)。我想這是關於輸入流,但是當我這樣做時,會關閉套接字,我無法重用它。我已經做到了這一點與readUTF和socket.shutDownInput做到了這一點,但我想要一個最簡單的方法 - 像close或flush,這是我沒有得到的。
客戶
public class SocketClient {
public static void main(String[] args) throws IOException {
// Check arguments
if (args.length < 3) {
System.err.println("Argument(s) missing!");
System.err.printf("Usage: java %s host port file%n", SocketClient.class.getName());
return;
}
String host = args[0];
// Convert port from String to int
int port = Integer.parseInt(args[1]);
// Concatenate arguments using a string builder
StringBuilder sb = new StringBuilder();
for (int i = 2; i < args.length; i++) {
sb.append(args[i]);
if (i < args.length-1) {
sb.append(" ");
}
}
String text = sb.toString();
// Create client socket
Socket socket = new Socket(host, port);
System.out.printf("Connected to server %s on port %d %n", host, port);
// Create stream to send data to server
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
// Send text to server as bytes
out.writeBytes(text);
out.writeBytes("\n"); // devia meter readline a null...
System.out.println("Sent text: " + text);
System.out.println(socket.getInetAddress().getHostAddress() + " " + socket.getPort());
//out.close();
//socket.shutdownOutput(); trials...
////////////////////////////////////////////
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("here");
// Receive data until client closes the connection
String response;
while ((response = in.readLine()) != null)
System.out.printf("Received message with content: '%s'%n", response); // here is where client doesn't proceed - he doesn't get the echo
服務器
public class SocketServer {
public static void main(String[] args) throws IOException {
// Check arguments
if (args.length < 1) {
System.err.println("Argument(s) missing!");
System.err.printf("Usage: java %s port%n", SocketServer.class.getName());
return;
}
// Convert port from String to int
int port = Integer.parseInt(args[0]);
// Create server socket
ServerSocket serverSocket = new ServerSocket(port);
System.out.printf("Server accepting connections on port %d %n", port);
// wait for and then accept client connection
// a socket is created to handle the created connection
Socket clientSocket = serverSocket.accept();
System.out.printf("Connected to client %s on port %d %n",
clientSocket.getInetAddress().getHostAddress(), clientSocket.getPort());
// Create stream to receive data from client
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
// Receive data until client closes the connection
String response;
while ((response = in.readLine()) != null)
System.out.printf("Received message with content: '%s'%n", response);
/////////////////////////////////////////////
DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream()); // he doesn't reach here
System.out.println("here-serv");
System.out.println(clientSocket.getInetAddress().getHostAddress() + " " + clientSocket.getPort());
// Send text to server as bytes
out.writeBytes("echo");
其實我相信這個問題已經從服務器,它是沒有得到一個空readline的東西 - 但客戶端發送一個「\ n」!你能找到我的代碼錯誤嗎?由於
我DONOT知道多少關於套接字,但爲什麼你不想去建立一個實時聊天服務器的Firebase雲消息傳遞? –
我不想建立這個,這只是一個實驗。簡單地使雙方發送和接收,這就是它... – samthegolden
一個插座將阻塞,直到它關閉,並且輸出流應該使用'flush()' –