This article introduces Java Socket-based file transfer case, and is shared with you for your reference. The specific content is as follows
1. Java code
package com.wf.demo.socket.socketfile; import java.net.*; import java.io.*; /** * 2. Socket's Util helper class* * @author willson * */ public class ClientSocket { private String ip; private int port; private Socket socket = null; DataOutputStream out = null; DataInputStream getMessageStream = null; public ClientSocket(String ip, int port) { this.ip = ip; this.port = port; } /** * Create socket connection* * @throws Exception * exception */ public void CreateConnection() throws Exception { try { socket = new Socket(ip, port); } catch (Exception e) { e.printStackTrace(); if (socket != null) socket.close(); throw e; } finally { } } // Send a message public void sendMessage(String sendMessage) throws Exception { try { out = new DataOutputStream(socket.getOutputStream()); if (sendMessage.equals("Windows")) { out.writeByte(0x1); out.flush(); return; } if (sendMessage.equals("Unix")) { out.writeByte(0x2); out.flush(); return; } if (sendMessage.equals("Linux")) { out.writeByte(0x3); out.flush(); } else { out.writeUTF(sendMessage); out.flush(); } } catch (Exception e) { e.printStackTrace(); if (out != null) out.close(); throw e; } finally { } } // Accept message public DataInputStream getMessageStream() throws Exception { try { getMessageStream = new DataInputStream(new BufferedInputStream( socket.getInputStream())); return getMessageStream; } catch (Exception e) { e.printStackTrace(); if (getMessageStream != null) getMessageStream.close(); throw e; } finally { } } // Close the connection public void shutDownConnection() { try { if (out != null) out.close(); if (getMessageStream != null) getMessageStream.close(); if (socket != null) socket.close(); } catch (Exception e) { } } } 2. Java code
package com.wf.demo.socket.socketfile; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.ServerSocket; import java.net.Socket; /** * 1. Server side* * @author willson * */ public class ServerTest { int port = 8821; void start() { Socket socket = null; try { ServerSocket serverSocket = new ServerSocket(port); while (true) { // Select the file for transfer String filePath = "E://lib.zip"; File fi = new File(filePath); System.out.println("File Name:" + fi.getName() + ";/tFile Size():" + (int) fi.length() + "bytes"); // public Socket accept() throws // IOException listens on and accepts connections to this socket. This method blocks until the connection is made. System.out.println("Waiting for the client to connect, connection port: " + port); socket = serverSocket.accept(); System.out.println("Create socket link"); DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream())); dis.readByte(); DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath))); DataOutputStream ps = new DataOutputStream(socket.getOutputStream()); // Pass the file name and length to the client. To truly apply to all platforms, such as processing of Chinese names, it also needs to be processed. For details, please refer to Think In Java // There is ready-made code in 4th. ps.writeUTF(fi.getName()); ps.flush(); ps.writeLong((long) fi.length()); ps.flush(); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; while (true) { int read = 0; if (fis != null) { read = fis.read(buf); } if (read == -1) { break; } ps.write(buf, 0, read); } ps.flush(); // Pay attention to closing the socket link, otherwise the client will wait for the server's data to come, // Until the socket timeout, resulting in incomplete data. fis.close(); socket.close(); System.out.println("File Transfer Completed/n"); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String arg[]) { new ServerTest().start(); } }
3. Client
package com.wf.demo.socket.socketfile; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileOutputStream; /** * 3. Client* * @author willson * */ public class ClientTest { private ClientSocket cs = null; private String ip = "localhost";// Set to server IP private int port = 8821; private String sendMessage = "Windwos"; public ClientTest() { try { if (createConnection()) { sendMessage(); getMessage("F://"); } } catch (Exception ex) { ex.printStackTrace(); } } private boolean createConnection() { cs = new ClientSocket(ip, port); try { cs.CreateConnection(); System.out.print("Connected to the server successfully!" + "/n"); return true; } catch (Exception e) { System.out.print("Connecting to the server failed!" + "/n"); return false; } } private void sendMessage() { if (cs == null) return; try { cs.sendMessage(sendMessage); } catch (Exception e) { System.out.print("Send message failed!" + "/n"); } } private void getMessage(String savePath) { if (cs == null) return; DataInputStream inputStream = null; try { inputStream = cs.getMessageStream(); } catch (Exception e) { System.out.print("Receive message cache error/n"); return; } try { // Local save path, the file name will automatically inherit from the server side. int bufferSize = 8192; byte[] buf = new byte[bufferSize]; int passedlen = 0; long len = 0; savePath += inputStream.readUTF(); DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath)))); len = inputStream.readLong(); System.out.println("File Size(): " + len + "bytes"); System.out.println("Start receiving files!" + "/n"); while (true) { int read = 0; if (inputStream != null) { read = inputStream.read(buf); } passedlen += read; if (read == -1) { break; } // The following progress bar is made of the progressBar of the graphical interface. If you are typing a file here, some of the same percentages may be repeatedly printed out System.out.println("File received" + (passedlen * 100 / len) + "%/n"); fileOut.write(buf, 0, read); } System.out.println("Received, file saved as " + savePath + "/n"); fileOut.close(); } catch (Exception e) { System.out.println("Receive message error" + "/n"); return; } } public static void main(String arg[]) { new ClientTest(); } }I hope this article will be helpful to everyone to learn Java programming.