在写一个client端通过socket向本地Server端上传demo代码时,将socket的InputStream封装在BufferedInputStream中就无法实现。
ServerSocket server = new ServerSocket(3333);
while(true) {
final Socket socket = server.accept();
new Thread() {
public void run() {
try {
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
FileOutputStream fos = new FileOutputStream("lib/test2");
int len = 0;
byte[] arr = new byte[8*1024];
while((len = is.read(arr)) != -1) {
fos.write(arr, 0, len);
}
fos.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
FileInputStream fis = new FileInputStream("test");
Socket socket = new Socket("127.0.0.1",3333);
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
BufferedInputStream bis = new BufferedInputStream(fis);
int len;
while((len = bis.read()) != -1) {
bos.write(len);
}
socket.close();
FileInputStream fis = new FileInputStream("test");
Socket socket = new Socket("127.0.0.1",3333);
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// BufferedOutputStream bos = new BufferedOutputStream(os);
BufferedInputStream bis = new BufferedInputStream(fis);
int len;
while((len = bis.read()) != -1) {
os.write(len);
}
socket.close();
在执行错误的client端代码时,client与server均处于等待状态
还大神赐教原因是什么?是不能对Socket中的InputStream和OutputStream进行封装么?
BufferedOutputStream 没有调用flush()吧?这样数据都在缓存中,都没输出,所以会在等待状态