首先贴上我的代码:
客户端:
package com.mysoft.socket;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;
/**
* TCP上传图片
* @author bo
*
*/
public class PicClinet {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1",10007);
FileInputStream fis = new FileInputStream("D:\\1.bmp");
//将图片写到服务端
OutputStream out = s.getOutputStream();
byte[] buf = new byte[1024];
int len =0;
while((len=fis.read(buf))!=-1){
out.write(buf,0,len);
}
//告诉服务端数据已经写完
s.shutdownOutput();
//接收服务端的返回信息
InputStream in = s.getInputStream();
byte[] bufIn = new byte[1024];
int num = in.read(bufIn);
System.out.println(new String(bufIn,0,num));
fis.close();
s.close();
}
}
服务端
package com.mysoft.socket;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class PicServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10007);
Socket s = ss.accept();
//获取客户端写过来的信息
InputStream in = s.getInputStream();
//指定上传的目的地
FileOutputStream fos = new FileOutputStream("server.bmp");
//将上传的图片写入目的地
byte[] buf = new byte[1024];
int len = 0;
while((len=in.read(buf))!=-1){
fos.write(buf,0,len);
}
//返回客户端信息
OutputStream out = s.getOutputStream();
out.write("上传成功!".getBytes());
fos.close();
s.close();
//只服务一次,所以关掉服务端
ss.close();
}
}
在我第一次写程序运行的时候,图片是没有写进去,后面我看视频几次,发现了这个客户端中要加入 s.shutdownOutput(); 然后运行,图片就上传了,老师说是什么 阻塞住了,我不懂,这个方法为什么加上之后就可以了啊,图片用while循环写完之后,当然就结束了,为什么还会阻塞住,导致流读不到数据呢?
|
|