Java网络编程练习把本地的文件上传到服务器保存
1)文件上传到客户端步骤: 1.创建客户端socket对象,指定要连接的服务器的ip地址和端口号 2.客户端socket对象调用getOutputStream方法,获取客户端的字节输出流对象 3.创建文件字节输入流FilelnputStream对象,指定客户端本地文件。 4.通过字节数组读(客户端本地文件)和写(服务器端) 5.客户端socket对象调用getlnputStream方法,获取客户端的字节输入流对象 6.通过客户端的字节输入流对象调用read方法,读取服务器端发送回来的响应数据 7.关闭流,释放资源。 2)文件上传到服务端步骤: 1.创建服务器端ServerSocket对象,指定端口号 2.服务器端ServerSocket对象调用accept(0方法,获取连接到服务器端的客户端Socket对象 3.使用服务器端的客户端Socket对象调用getlnputstream方法,获取服务器端的字节输入流对象,来读取客户端发送过来的数据 4.创建文件字节输出流FileOutputStream对象,指定服务器端的目标文件 5.字节数组循环读(客户端发送过来的数据)和写(服务器端的目标文件) 6.服务器端ServerSocket对象调用getOutputStream方法,获取服务器端的字节输出流对象 7.服务器端的字节输出流对象调用write方法,给客户端发送响应数据 8.关闭流,释放资源
客户端
package com.m.demo6; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.PrintStream; import java.net.Socket; public class ClientSocket { public static void main(String[] args) throws IOException { Socket client=new Socket("127.0.0.1",9999);//创建客户端 本机ip地址,端口号随便输的 ///使用打印流包装 输出给服务器 PrintStream pos=new PrintStream(client.getOutputStream(),true); ///客户端读取本地文件 FileInputStream fis=new FileInputStream("F:\01.mp3"); // ///使用缓冲流读本地文件 BufferedInputStream bis=new BufferedInputStream(fis); byte bytes[]=new byte[1024]; int len; System.out.println("读取本地文件"); while((len=bis.read(bytes))!=-1) { ///客户端使用打印流输出给服务器 System.out.println("发送客户端文件"); pos.write(bytes,0,len); } client.shutdownOutput();//通知服务器,文件输入结束 BufferedInputStream cbis=new BufferedInputStream(client.getInputStream()); ///使用缓冲区包装 读取服务器信息 len=cbis.read(bytes); System.out.println("服务器传来的信息:"+new String(bytes,0,len)); pos.close(); bis.close(); cbis.close(); client.close(); } }
服务端
package com.m.demo6; import java.io.BufferedInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class ServerSocketTcp { public static void main(String[] args) throws IOException { System.out.println("等待客户端信息"); //创建服务器对象 ServerSocket server=new ServerSocket(9999);//指定和客户端一致的端口号 Socket accept = server.accept();//使用accept 调用输入 输出方法 ///服务器接受客户端信息 使用缓冲区包装 BufferedInputStream bis=new BufferedInputStream(accept.getInputStream()); ///使用打印流 存入本地 并发送信息给客户端 PrintStream aps=new PrintStream(accept.getOutputStream(),true); PrintStream ps=new PrintStream(new FileOutputStream("copy.mp3"),true); byte bytes[]=new byte[1024]; int len; while((len=bis.read(bytes))!=-1) { ps.write(bytes,0,len); } aps.print("收到文件,并存入服务器"); ps.close(); aps.close(); bis.close(); accept.close(); server.close(); } }