目的:将数据发送到服务器,并有服务器返回的东西回来,并打印的内容服务器发回读取和写入服务器
问题:如果我关闭了流,它可以将数据发送到服务器,但我的输入流将无法工作,我无法收到服务器试图给我的东西。如果我使用flush()将数据发送到服务器,则服务器永远不会接收数据。我一直坚持这3个小时。你怎么做,同时阅读和写入。
Client.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
class Client {
public static void main(String args[]) {
String data = "head";
try {
Socket skt = new Socket("server", 5050);
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(skt.getInputStream()));
out.print(data);
out.close();
System.out.println("Sent data");
while (!in.ready()) {
}
String input = in.readLine();
System.out.println(input);
out.close();
in.close();
skt.close();
} catch (Exception e) {
System.out.print("Whoops! It didn't work!\n" +e.toString());
}
}
}
Server.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.PrintWriter;
class Server {
public static void main(String args[]) {
String data;
String input;
try {
ServerSocket srvr = new ServerSocket(5050);
Socket skt = srvr.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(
skt.getInputStream()));
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
// /////Waits for message from client/////////
while (!in.ready()) {
}
// ///////////////////////////////////////////
input = in.readLine(); // Read the message
System.out.println("Received String input: " + input);
// Send output to client
System.out.println("After output");
if (input.equals("head"))
data = "haha";
else
data = "Wtf did you send me";
Thread.sleep(2000);
out.print(data);
// ///////////////////
System.out.println("Sent data: " + data);
in.close();
out.close();
skt.close();
srvr.close();
} catch (Exception e) {
System.out.print("Whoops! It didn't work!\n");
}
}
}
服务器阻塞什么声明?客户端在哪里阻塞?你有没有在IDE调试器中运行它? –