1.问题描述:
在写一个client端通过socket向本地Server端上传demo代码时,将socket的InputStream封装在BufferedInputStream中就无法实现。
2.代码实现
# Server端代码
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();
}
错误的client端代码
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();
可成功client端代码(不对Socekt的OutputStream进行封装即可上传成功)
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();
3.问题现象
在执行错误的client端代码时,client与server均处于等待状态
还大神赐教原因是什么?是不能对Socket中的InputStream和OutputStream进行封装么?