服务器端: 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("文件上传完毕!"); } }