java网络编程(7)——利用tcp实现文件上传
其实客户端与服务端通讯的道理都是一样的,都是通过输入与输出这两个流,那么实现文件上传也就是同样的,客户端把文件读到文件流,服务端用文件流来接受,然后写到一个文件中,这样子就实现了文件上传,文件拷贝也是同样的道理~,具体看代码实现:
客户端:
package com.seven.tcp; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class TcpFileUploadClient { public static void main(String[] args) throws Exception { Socket socket = new Socket("127.0.0.1",10001); FileInputStream fis = new FileInputStream(new File("e:\\test.txt")); OutputStream out = socket.getOutputStream(); byte[] buf = new byte[1024]; int len = 0; while((len=fis.read(buf))!=-1){ out.write(buf); } socket.shutdownOutput(); InputStream in = socket.getInputStream(); len = in.read(buf); System.out.println("return:"+new String(buf,0,len)); fis.close(); socket.close(); } }
服务端:
package com.seven.tcp; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /** * 服务端要用多线程来实现,这样才能实现多个用户同时上传 * * @author Seven * */ public class TcpFileUploadServer { public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(10001); //循环,每次有新的连接就开启一个新的线程 while(true){ Socket socket = serverSocket.accept(); new Thread(new FileUploadThread(socket)).start(); } } } class FileUploadThread implements Runnable { private Socket socket; public FileUploadThread(Socket s) { this.socket = s; } // 在run方法中实现文件上传 public void run() { try { System.out.println(socket.getInetAddress().getHostAddress()+"....connected"); String filename = socket.getInetAddress().getHostAddress(); int count = 1; File file = new File("e:\\" + filename + count); while (file.exists()) { file = new File("e:\\" + filename + count++); } FileOutputStream fileOutputStream = new FileOutputStream(file); InputStream in = socket.getInputStream(); byte[] b = new byte[1024]; int len = 0; while ((len = in.read(b)) != -1) { fileOutputStream.write(b,0,len); } //返回成功 OutputStream out = socket.getOutputStream(); out.write("success!".getBytes()); socket.close(); }catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } }