给服务器上传文件
需要分别为服务器端和客户端创建两个类(我这里创建的是Tcpclient.class、TcpServer.class)
这是客户端类Tcpclient.class代码
import java.io.InputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; /* 文件上传案例到客户端:读取本地文件,上传到服务器,读取服务器回写的数据 数据源:C:\\1.jpg 实现步骤: 1、创建一个本地字节输入流FileInputStream 对象,构造方法中绑定要读取的数据源 2、创建一个客户端Socket对象,构造方法中绑定服务器的IP地址和端口号 3、使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream 4、使用本地字节输入流FileInoutStream对象中的方法read,读取本地文件 5、使用网络字节输出流OutputStream对象中的方法write,把读取到的文件上传到服务器端 6、使用Socket中的方法getInputStream,获取网络字节输入流InputSteam对象 7、使用网络字节输入流InputStream对象中的方法read读取服务器回写的数据 8、关闭释放资源 */ public class Tcpclient { public static void main(String[] args) throws IOException { //1、读取本地文件 FileInputStream fis = new FileInputStream("C:\\1.jpg"); //2、创建一个客户端Socket对象,构造方法中绑定服务器的IP地址和端口号 Socket socket = new Socket("192.168.1.173",8888); //3、使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream OutputStream os = socket.getOutputStream(); //4、使用本地字节输入流FileInoutStream对象中的方法read,读取本地文件 int len; byte [] bytes = new byte [1024]; while ((len = fis.read(bytes)) != -1){ //5、使用网络字节输出流OutputStream对象中的方法write,把读取到的文件上传到服务器端 os.write(bytes,0,len); } // 6、使用Socket中的方法getInputStream,获取网络字节输入流InputSteam对象 InputStream is = socket.getInputStream(); // 7、使用网络字节输入流InputStream对象中的方法read读取服务器回写的数据 while ((len = is.read(bytes)) != -1){ String str = new String(bytes, 0, len); System.out.println(str); } socket.close(); } }
这里我将我本机作为服务器,按住win+R 输入cmd,然后输入ipconfig就可以查看自己电脑的ip地址
这是服务器端类TcpSever.class代码
import java.io.FileOutputStream; import java.io.File; import java.io.InputStream; import java.net.Socket; import java.io.IOException; import java.net.ServerSocket; /** 文件上传案例服务器端:读取客户端上传的文件,保存到服务器的硬盘,给客户端回写“上传成功” 明确:数据源:服务器的硬盘:E:\\upload\1.jpg 实现步骤: 1、创建一个服务器SeverSocket对象和系统指定的端口号 2、使用SeverSocket对象中的方法accept,获取请求的客户端Socket对象 3、使用Socket对象中的方法getInputStream,获取到网络字节输入流对象 4、判断E:\\load文件夹是否存在,若不存在则创建一个 5、创建一个本地输出流对象FileOutputStream对象,构造方法中绑定要输出的数据源目的地 6、使用网络字节输入流InputStream对象中的方法read,读取客户端上传文件 7、使用本地字节输出流FileInputStream对象中的方法write,把读取到的文件保存到服务器上 8、使用Socket对象中的方法getOutputStream,获取网络字节输出流对象OutputStream 9、使用网络字节输出流OutputStream对象中的方法write,给客户端回写上“上传成功” 10、释放资源 */ public class TapServer { public static void main(String[] args) throws IOException { //1、创建一个服务器SeverSocket对象和系统指定的端口号/**/ ServerSocket ss = new ServerSocket(8888); //2、使用SeverSocket对象中的方法accept,获取请求的客户端Socket对象 Socket s = ss.accept(); //3、使用Socket对象中的方法getInputStream,获取到网络字节输入流对象 InputStream is = s.getInputStream(); //4、判断E:\\load文件夹是否存在,若不存在则创建一个 File file = new File("E:\\upload"); if (!file.exists()){ file.mkdir(); } //5、创建一个本地输出流对象FileOutputStream对象,构造方法中绑定要输出的数据源目的地 FileOutputStream fos = new FileOutputStream(file+"\\1.jpg"); int len ; byte [] buf = new byte [1024]; //6、使用网络字节输入流InputStream对象中的方法read,读取客户端上传文件 while ((len = is.read(buf)) != -1){ fos.write(buf, 0, len); } //8、使用Socket对象中的方法getOutputStream,获取网络字节输出流对象OutputStream //9、使用网络字节输出流OutputStream对象中的方法write,给客户端回写上“上传成功” s.getOutputStream().write("上传成功".getBytes()); //10、释放资源 fos.close(); ss.close(); } }
先运行服务器端TcpServer.java文件,然后运行客户端Tcpclient.java文件
之后便可看到在E:\upload的目录下会有一张1.jpg的照片