1、使用 Socket 编程实现文件上传这是一个基础 Socket 编程练习,由于在实际应用中,不止一个客户端可以上传文件,所以本人根据实际情况,以多线程的形式实现该文件上传功能。开发环境;eclipse。具体源码如下:服务器端;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.*;import .*;import java.util.concurrent.*;public class MultiThreadServer private int port=
2、8821;private ServerSocket serverSocket;private ExecutorService executorService;/线程池private final int POOL_SIZE=10;/线程池大小public MultiThreadServer() throws IOExceptionserverSocket=new ServerSocket(port);executorService=Executors.newFixedThreadPool(POOL_SIZE);System.out.println(“服务器已启动 “);public void s
3、ervice()while(true)Socket socket=null;try /接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接socket=serverSocket.accept();executorService.execute(new Handler(socket); catch (Exception e) e.printStackTrace();public static void main(String args) throws IOException new MultiThreadServer().service();class Handler imp
4、lements Runnableprivate Socket socket;private String FilePath=“D:“;public Handler(Socket socket)this.socket=socket;public void run()try System.out.println(“New connection accepted “+socket.getInetAddress()+“:“+socket.getPort();InputStream socketIn=socket.getInputStream();BufferedInputStream BIS=new
5、BufferedInputStream(socketIn);BufferedOutputStream BOS=new BufferedOutputStream(new FileOutputStream(new File(FilePath);int data;while(data=BIS.read()!=-1)BOS.write(data); catch (IOException e) e.printStackTrace();finallytry if(socket!=null)socket.close(); catch (IOException e) e.printStackTrace();客
6、户端:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import .Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.io.*;public class MultiThreadClient public static void main(String arg
7、s) int numTasks = 10;ExecutorService exec = Executors.newCachedThreadPool();for (int i = 0; i numTasks; i+) exec.execute(createTask(i);/ 文件传输任务private static Runnable createTask(final int taskID) return new Runnable() private Socket socket = null;private int port=8821;File f=new File(“abcd“); /方便起见,
8、假设存在该文件,实际应用中可以适当修改public void run() System.out.println(“Task “ + taskID + “:start“);try socket = new Socket(“localhost“, port);OutputStream socketOut = socket.getOutputStream();BufferedOutputStream BOS=new BufferedOutputStream(socketOut);BufferedInputStream BIS=new BufferedInputStream(new FileInputStream(f);int data;while (data = BIS.read() != -1)BOS.write(data); catch (IOException e) e.printStackTrace();