问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
--------------------------服务端代码--------------------------
public class Server {
private ServerSocket server;
public Server() {
try {
System.out.println("正在启动服务端...");
server = new ServerSocket(8088);
System.out.println("服务端启动完毕!");
}catch(Exception e) {
e.printStackTrace();
}
}
public void start() {
try {
while(true) {
System.out.println("等待客户连接。。。");
Socket socket = server.accept();
System.out.println("一个客户连接");
InputStream in = socket.getInputStream();
int len=-1;
StringBuilder str = new StringBuilder();
//byte数组长度只能设置成3(一个中文字符的长度)才能正确显示中文
byte[] data = new byte[3];
while((len=in.read(data))!=-1) {
str.append(new String(data,0,len,"UTF-8"));
System.out.println(str);
}
System.out.println(str);
}
}catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Server server = new Server();
server.start();
}
}
--------------------------客户端代码--------------------------
public class Client {
private Socket socket;
public Client() {
try {
/*
* 实例化Socket的过程就是发起连接的过程,若服务端
* 没有响应则这里会直接抛出异常
* "127.0.0.1" 真实ip地址 localhost
*/
System.out.println("正在连接服务端");
socket = new Socket("localhost",8088);
System.out.println("已连接服务端");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void start() {
try {
OutputStream out = socket.getOutputStream();
String str = "我们幸福的生活着";
/*
* 在网上查了很久也没搞清楚,为什么基本字节流OutputStream
* 只要不close(),Server端InputStream的read()方法就不会
* 返回-1表示结束。
* 以下是我的理解。
* 字节流OutputStream的write()方法不会主动发送结束符。唯有
* close该OutputStream,才会给服务端发送结束符。
*/
out.write(str.getBytes("UTF-8"));
out.flush();
//out.close();
while(true) {
System.out.println("请输入:");
Scanner scan = new Scanner(System.in);
String line = scan.nextLine();
out.write(line.getBytes("UTF-8"));
out.flush();
}
}catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Client client = new Client();
client.start();
}
}
我的解答思路和尝试过的方法
在网上查了很久也没搞清楚,为什么基本字节流OutputStream
只要不close(),Server端InputStream的read()方法就不会
返回-1表示结束。
以下是我的理解。
字节流OutputStream的write()方法不会主动发送结束符。唯有
close该OutputStream,才会给服务端发送结束符。
我想要达到的结果
我想问一下,如何用outputstream和inputstream两个流实现实时的
字符传输。