1 public class fileClient {
2 public static void main(String[] args) throws IOException {
3 FileInputStream fis = new FileInputStream("D:\\1.jpg");//创建一个本地的输入流,用于指定上传数据的数据源
4 Socket socket = new Socket("127.0.0.1",8888);//创建一个客户端对象,host是服务器名称或Ip地址
5 OutputStream os = socket.getOutputStream();//使用socket中的方法,获取网络字节输出流对象
6
7 byte[] bytes = new byte[1024];//把本地硬盘的数据通过网络字节输出流传递给客户端
8 int len = 0;
9 while ((len = fis.read(bytes))!=-1){
10 os.write(bytes,0,len);
11 }
12
13 socket.shutdownOutput();//为了解决阻塞问题
14
15 InputStream is = socket.getInputStream();//使用socket中的方法,获取网络字节输入流,用于读取客户端的数据
16 while((len = is.read(bytes))!=-1){//读取客户端的数据进行输出
17 System.out.println(new String(bytes,0,len));
18 }
19
20 socket.close();//关闭流
21 fis.close();
22 }
23 }
1 public class fileServer {
2 public static void main(String[] args) throws IOException {
3 ServerSocket serverSocket = new ServerSocket(8888);//创建服务器端对象
4
5
6
7 //while(true){//让服务器一直处于运行状态,保证客户端可以随时向服务器上传文件
8 new Thread(new Runnable() {//为了提高文件上传效率,来一个客户端开一个线程
9 @Override
10 public void run() {
11 try{
12 Socket socket = serverSocket.accept();//使用accept方法接收客户端的数据
13 InputStream is = socket.getInputStream();//创建网络字节输入流
14
15 File file = new File("D:\\upload");//判断服务器硬盘中的文件夹是否存在,此文件夹用于存储客户端上传的内容
16 if (!file.exists()){//判断服务器端的文件夹是否存在
17 file.mkdirs();
18 }
19
20 String fileName = "\\picture"+System.currentTimeMillis()+new Random().nextInt(99999)+".jpg";//自己随机生成文件名,防止重复
21
22 FileOutputStream fos = new FileOutputStream(file+fileName);//
23
24 int len;
25 byte[] bytes = new byte[1024];
26 while((len = is.read(bytes))!= -1 ){//将客户端的数据写入服务器硬盘中
27 fos.write(bytes,0,len);
28 }
29
30 OutputStream os = socket.getOutputStream();//向客户端回应
31 os.write("上传成功".getBytes());
32
33 socket.close();
34 fos.close();
35 }catch (IOException e){//在这里只能使用try catch解决异常,因为run方法不支持抛出异常
36 System.out.println(e);
37 }
38
39 }
40 }).start();
41 //}
42
43 }
44 }