因此,这里是我的代码:在服务器刷新数据之前,数据如何由服务器的套接字接收?
public class TestClass {
public static void main(String[] args) throws IOException, InterruptedException {
Thread server = new Thread(new MyServer());
server.start();
Thread.sleep(750);
Thread client = new Thread(new MyClient());
client.start();
}
}
服务器:
public class MyServer implements Runnable{
public static synchronized void go() throws IOException {
System.out.println("MyServer: Go called...");
ServerSocket serverSocket = new ServerSocket(5000);
while(true){
Socket socket = serverSocket.accept();
System.out.println(time() + "MyServer: Connection accepted!");
OutputStream outputStream = socket.getOutputStream();
System.out.println(time() + "MyServer: socket.getOutputStream");
PrintWriter printWriter = new PrintWriter(outputStream);
System.out.println(time() + "MyServer: New PrintWriter object created!");
printWriter.write("Hello from my socket!");
System.out.println(time() + "MyServer: printwriter.write method called..");
printWriter.flush();
System.out.println(time() + "MyServer: Flushed!");
printWriter.close();
System.out.println(time() + "MyServer: printWriter closed...");
}
}
public static String time(){
return String.valueOf(MyCounterClass.getCounter()) + " ";
}
@Override
public void run() {
try {
go();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户:
public class MyClient implements Runnable {
public static synchronized void go() throws IOException {
Socket socket = new Socket("localhost",5000);
System.out.println(time() + "My Client: Connection established...");
InputStream inputStream = socket.getInputStream();
System.out.println(time() + "MyClient: socket.getInputStream...");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
System.out.println(time() + "MyClient: BufferedReader object created...");
System.out.println(time() + "Bufferedreader readline being called and directly printer: " + bufferedReader.readLine());
System.out.println(time() + "bufferedReader.readline has just been called...");
}
public static String time(){
return String.valueOf(MyCounterClass.getCounter()) + " ";
}
@Override
public void run() {
try {
go();
} catch (IOException e) {
e.printStackTrace();
}
}
}
和反类:
public class MyCounterClass {
private static volatile int counter = 0;
synchronized public static int getCounter(){
return counter++;
}
}
和输出将是:
0 My Client: Connection established...
1 MyServer: Connection accepted!
2 MyClient: socket.getInputStream...
3 MyClient: BufferedReader object created...
4 MyServer: socket.getOutputStream
6 MyServer: New PrintWriter object created!
7 MyServer: printwriter.write method called..
8 MyServer: Flushed!
9 MyServer: printWriter closed...
5 Bufferedreader readline being called and directly printer: Hello from my socket!
10 bufferedReader.readline has just been called...
当下令:
0 My Client: Connection established...
1 MyServer: Connection accepted!
2 MyClient: socket.getInputStream...
3 MyClient: BufferedReader object created...
4 MyServer: socket.getOutputStream
5 Bufferedreader readline being called and directly printer: Hello from my socket!
6 MyServer: New PrintWriter object created!
7 MyServer: printwriter.write method called..
8 MyServer: Flushed!
9 MyServer: printWriter closed...
10 bufferedReader.readline has just been called...
那么,什么是怪我是5号线是6,7,8 ......之前这是如何可能?
“冲洗”意味着数据确保已传输,否则该方法将一直等待。它可以更快地传递。 –
[为什么我在Socket连接中的Java线程中看到这种奇怪的输出?](http://stackoverflow.com/questions/24468356/why-am-i-seeing-this-weird-output-in-java -threads-in-socket-connections) – alk
@alk它不是重复的。 –