public class BioServer {
public static void main(String[] args) {
boolean flag = true;
try {
ServerSocket serverSocket = new ServerSocket(6666);
while (flag) {
Socket socket = serverSocket.accept();
if (socket != null) {
new Thread(() -> {
try {
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream), 10);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream), 10);
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
writer.write(line + System.lineSeparator());
// writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class BioClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 6666);
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream), 10);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
while (true) {
writer.write("hellowor" + System.lineSeparator());
// writer.flush();
String str = reader.readLine();
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
为什么服务端收不到客户端发送的那条消息?我想知道原因的本质在哪里。
客户端中:我的应用缓冲设置的大小为10,写入的数据为10个字符,那么在调用write方法的时候,会发起系统调用,将数据发送到套接字内核发送缓冲区(当然10个字符远远没有超过套接字内核发送缓冲区大小),但是据我了解,如果内核发送缓冲区没有满,但是超过一定的时间,操作系统还是会将数据往底层协议发起调用,最终通过网卡发送到网络中。另外发送的数据是以"\r\n"结尾的10个字符。
服务端中:BufferReader的缓冲大小我设置为10,按行读取数据(readline),但是程序运行到readline,就会被阻塞住。应用程序的缓冲大小在10上下浮动,结果都一样。
没有想明白,希望基本功扎实的同行帮忙解答一下。谢谢!