对IO一直都不胜了解,平时也就那么用了,没出什么大问题,以前的Android项目与后台传输json时用过BufferedReader,并没有什么问题,今天写了一个TCP协议的小Dome发现一直接收不到客户端传递的消息,debug发现while循环一次之后,StringBuilder没有值了,一直想不明白为什么,求大神开解!!
出现了互相等待,客户端和服务器端都等待对方给自己发送消息,在客户端添加一个shutdownOutput(),就好了.
下面是代码
package com.bw.test03;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TestTCP1 {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket accept = null;
InputStream input = null;
OutputStream output = null;
BufferedReader read = null;
PrintWriter write = null;
PrintStream point = null;
try {
serverSocket = new ServerSocket(6666);
accept = serverSocket.accept();
System.out.println("连接成功");
input = accept.getInputStream();
output = accept.getOutputStream();
read = new BufferedReader(new InputStreamReader(input));
StringBuilder buffer = new StringBuilder();
String str = "";
while((str = read.readLine()) != null ) {
buffer.append(str);
System.out.println(buffer.toString()+2);
point = new PrintStream(output);
point.println(buffer.toString()+" 服务端收到请求");
}
System.out.println("收到客户端传来的请求:");
System.out.println(buffer.toString());
point = new PrintStream(output);
point.println(buffer.toString()+" 服务端收到请求");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
write.close();
read.close();
output.close();
input.close();
accept.close();
serverSocket.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package com.bw.test03;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TestTCP2 {
public static void main(String[] args) {
Socket socket = null;
InputStream input = null;
OutputStream output = null;
BufferedReader read = null;
PrintWriter write = null;
PrintStream point = null;
try {
socket = new Socket("127.0.0.1", 6666);
input = socket.getInputStream();
output = socket.getOutputStream();
point = new PrintStream(output);
point.println("服务端收到请回复");
read = new BufferedReader(new InputStreamReader(input));
StringBuilder buffer = new StringBuilder();
String str = "";
while((str = read.readLine())!=null) {
buffer.append(str);
System.out.println(buffer.toString()+2);
}
System.out.println("收到服务端传来的响应:");
System.out.println(buffer.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
write.close();
read.close();
output.close();
input.close();
socket.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
在while循环里的可以打印输出并且接收到了值,但是下面的就没有值了,我为新手一个,求解