1024programmer Java A brief analysis of Java Socket-based file transfer cases

A brief analysis of Java Socket-based file transfer cases

This article introduces the Java Socket-based file transfer case and shares it 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. Util auxiliary class of socket
  *
  * @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
    *
    * @throwsException
    * 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 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 files 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 for and accepts connections to this socket.  This method blocks until a connection is made.
 
         
         System.out.println("Waiting for client connection, connection port: " + port);
         socket = serverSocket.accept();
         
         System.out.println("Establish socket connection");
         
         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.  This must be truly applicable to all platforms, such as the processing of Chinese names, which still needs processing. 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();
         // Be careful to close the socket link, otherwise the client will wait for data from the server.
         // Until the socket times out, 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("Connection to server successful!" + "\n");
       return true;
     } catch (Exception e) {
       System.out.print("Failed to connect to server!" + "\n");
       return false;
     }
 
   }
 
   private void sendMessage() {
     
     if (cs == null)
       return;
     try {
       cs.sendMessage(sendMessage);
     } catch (Exception e) {
       System.out.print("Failed to send message!" + "\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 be automatically inherited from the server.
       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 progress bar below is originally made for the prograssBar of the graphical interface. If you are printing a file here, some of the same percentages may be printed repeatedly.
         System.out.println("File received" + (passedlen * 100 / len) + "%\n");
         fileOut.write(buf, 0, read);
       }
       System.out.println("Reception completed, file saved as" + savePath + "\n");
 
       fileOut.close();
     } catch (Exception e) {
       System.out.println("Error in receiving message" + "\n");
       return;
     }
   }
 
   public static void main(String arg[]) {
     new ClientTest();
   }
 }
 

I hope this article will be helpful to everyone learning Java programming.

This article is from the internet and does not represent1024programmerPosition, please indicate the source when reprinting:https://www.1024programmer.com/703492

author: admin

Previous article
Next article

Leave a Reply

Your email address will not be published. Required fields are marked *

Contact Us

Contact us

181-3619-1160

Online consultation: QQ交谈

E-mail: [email protected]

Working hours: Monday to Friday, 9:00-17:30, holidays off

Follow wechat
Scan wechat and follow us

Scan wechat and follow us

Follow Weibo
Back to top
首页
微信
电话
搜索