基于TCP文件传输(Java)

来源:互联网 发布:双网卡路由器共享网络 编辑:程序博客网 时间:2024/05/21 18:49
//服务器端    import java.io.BufferedInputStream;      import java.io.BufferedOutputStream;      import java.io.FileOutputStream;      import java.net.ServerSocket;      import java.net.Socket;      //使用TCP协议写一个可以上传文件的服务器和客户端。      public class UpLoad {          public static void main(String[] args) throws Exception {              ServerSocket ss = new ServerSocket(3000);              Socket socket = ss.accept();              new Thread(new Receive(socket)) {              }.start();          }      }      class Receive implements Runnable {          private Socket socket;          public Receive(Socket socket) {              this.socket = socket;          }          public void run() {              try {                  BufferedInputStream bis = new BufferedInputStream(socket                          .getInputStream());                  byte[] bFileName = new byte[255];                  int len = bis.read(bFileName);                  String fileName = new String(bFileName, 0, len).trim();                  byte[] bytes = new byte[1024];                  FileOutputStream fos = new FileOutputStream("d://" + fileName);                  BufferedOutputStream bos = new BufferedOutputStream(fos);                  len = 0;                  while ((len = bis.read(bytes)) != -1) {                      bos.write(bytes, 0, len);                  }                  bos.close();                  fos.close();                  bis.close();                  socket.close();              } catch (Exception e) {                  e.printStackTrace();              }          }      }  //客户端:import java.io.BufferedOutputStream;      public class UpLoadClient {          public static void main(String[] args) throws Exception {              BufferedReader br = null;              String path = null;              String fileName = null;              String ip = null;              while (true) {                  System.out.println("请输入文件路径:");                  br = new BufferedReader(new InputStreamReader(System.in));                  path = br.readLine();                  File file = new File(path);                  fileName = path.substring(path.lastIndexOf("//") + 1);                  if (file.isDirectory() || !file.exists())                      System.out.println("路径不正确!");                  else                      break;              }              System.out.println("请输入服务器地址:");              br = new BufferedReader(new InputStreamReader(System.in));              ip = br.readLine();              System.out.println("确认上传:" + path + "文件吗(y/n)?");              br = new BufferedReader(new InputStreamReader(System.in));              String result = br.readLine();              if ("n".equalsIgnoreCase(result)) {                  br.close();                  return;              }              Socket socket = new Socket(ip, 3000);              FileInputStream fs = new FileInputStream(path);              byte[] bytes = new byte[1024];              BufferedOutputStream bos = new BufferedOutputStream(socket                      .getOutputStream());              while (true) {                  if (fileName.getBytes().length < 255)                      fileName += "/u0000";                  else                      break;              }              bos.write(fileName.getBytes());              bos.flush();              int len = 0;              while ((len = fs.read(bytes)) != -1) {                  bos.write(bytes, 0, len);              }              bos.close();              fs.close();              br.close();              socket.close();              System.out.println("文件上传完毕!");          }      }

0 0
原创粉丝点击