Cet article présente un cas de transfert de fichiers basé sur Java Socket et est partagé avec vous pour votre référence. Le contenu spécifique est le suivant
1. Code java
package com.wf.demo.socket.socketfile; importer java.net. *; importer java.io. *; / ** * 2. port int privé; Pobite privée socket = null; DataOutputStream out = null; DataRainputStream getMessageStream = null; public clientSocket (String ip, int port) {this.ip = ip; this.port = port; } / ** * Créer une connexion à socket * * @throws exception * exception * / public void createConnection () lève l'exception {try {socket = new socket (ip, port); } catch (exception e) {e.printStackTrace (); if (socket! = null) socket.close (); jeter e; } Enfin {}} // Envoyer un message public void sendMessage (String SendMessage) lève une exception {try {out = new DataOutputStream (socket.getOutputStream ()); if (SendMessage.Equals ("Windows")) {out.writeByte (0x1); out.flush (); retour; } if (sendMessage.equals ("Unix")) {out.writeByte (0x2); out.flush (); retour; } 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 (); jeter e; } Enfin {}} // Accepter le message public DataRainputStream getMessageStream () lève une exception {try {getMessageStream = new DataRainputStream (new BufferedInputStream (socket.getInputStream ())); return getMessageStream; } catch (exception e) {e.printStackTrace (); if (getMessageStream! = null) getMessageStream.close (); jeter e; } Enfin {}} // Fermez la connexion publique void shutdownConnection () {try {if (out! = null) out.close (); if (getMessageStream! = null) getMessageStream.close (); if (socket! = null) socket.close (); } catch (exception e) {}}} 2. Code java
package com.wf.demo.socket.socketfile; Importer java.io.BufferedInputStream; import java.io.datainputStream; import java.io.dataOutputStream; Importer java.io.file; import java.io.fileInputStream; import java.net.serversocket; import java.net.socket; / ** * 1. Côté serveur * * @author willson * * / public class SERVERTest {int port = 8821; void start () {socket socket = null; try {serversocket serversocket = new serversocket (port); while (true) {// sélectionnez le fichier pour la chaîne de transfert filepath = "e: //lib.zip"; Fichier fi = nouveau fichier (filepath); System.out.println ("Nom de fichier:" + fi.getName () + "; / tfile size ():" + (int) fi.length () + "bytes"); // public socket accepte () lance // ioException écoute et accepte les connexions à cette prise. Cette méthode bloque jusqu'à ce que la connexion soit établie. System.out.println ("En attente du client pour se connecter, port de connexion:" + port); socket = serversocket.Accept (); System.out.println ("Créer un lien de socket"); DatAnputStream Dis = new DatainputStream (new BufferedInputStream (socket.getInputStream ())); dis.readbyte (); DatAnputStream fis = new DataRainputStream (new BufferedInputStream (new FileInputStream (filepath))); DataOutputStream ps = new DataOutputStream (socket.getOutputStream ()); // Passez le nom et la longueur du fichier au client. Pour vraiment s'appliquer à toutes les plateformes, telles que le traitement des noms chinois, il doit également être traité. Pour plus de détails, veuillez vous référer à Think in Java // Il y a du code prêt à l'emploi en 4e. ps.writeUtf (fi.getName ()); ps.flush (); ps.Writelong ((long) fi.length ()); ps.flush (); int buffersize = 8192; octet [] buf = nouveau octet [tamponSize]; while (true) {int read = 0; if (fis! = null) {read = fis.read (buf); } if (read == -1) {break; } ps.write (buf, 0, lecture); } ps.flush (); // Faites attention à la fermeture du lien de socket, sinon le client attendra que les données du serveur arrivent, // jusqu'à ce que le délai d'expiration du socket, ce qui entraîne des données incomplètes. fis.close (); socket.close (); System.out.println ("Transfert de fichiers terminé / n"); }} catch (exception e) {e.printStackTrace (); }} public static void main (String arg []) {new serverTest (). start (); }}
3. Client
package com.wf.demo.socket.socketfile; Importer java.io.BufferedOutputStream; import java.io.datainputStream; import java.io.dataOutputStream; Importer java.io.fileOutputStream; / ** * 3. Client * * @Author Willson * * / public class ClientTest {private ClientSocket cs = null; chaîne privée ip = "localhost"; // défini sur server ip private int port = 8821; String privé sendMessage = "Windwos"; public clientTest () {try {if (createConnection ()) {sendMessage (); getMessage ("f: //"); }} catch (exception ex) {ex.printStackTrace (); }} private boolean createConnection () {cs = new ClientSocket (ip, port); essayez {cs.createConnection (); System.out.print ("connecté au serveur avec succès!" + "/ N"); Retour Vrai; } catch (exception e) {System.out.print ("Connexion au serveur a échoué!" + "/ n"); retourne false; }} private void sendMessage () {if (cs == null) return; essayez {c.sendMessage (sendMessage); } catch (exception e) {System.out.print ("Envoyer le message a échoué!" + "/ n"); }} private void getMessage (String SavePath) {if (cs == null) return; DatAnputStream inputStream = null; essayez {inputStream = cs.GetMessageStream (); } catch (exception e) {System.out.print ("Recevoir l'erreur de cache de message / n"); retour; } essayez {// le chemin de sauvegarde local, le nom du fichier héritera automatiquement du côté serveur. int buffersize = 8192; octet [] buf = nouveau octet [tamponSize]; int coudLen = 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 + "octets"); System.out.println ("Commencez à recevoir des fichiers!" + "/ N"); while (true) {int read = 0; if (inputStream! = null) {read = inputStream.read (buf); } dépassent + = lecture; if (read == -1) {break; } // La barre de progrès suivante est faite de la barre de progression de l'interface graphique. Si vous tapez un fichier ici, certains des mêmes pourcentages peuvent être imprimés à plusieurs reprises System.out.println ("fichier reçu" + (passlen * 100 / len) + "% / n"); fileout.write (buf, 0, lecture); } System.out.println ("Reçu, fichier enregistré comme" + SavePath + "/ n"); fileout.close (); } catch (exception e) {System.out.println ("Recevoir l'erreur de message" + "/ n"); retour; }} public static void main (String arg []) {new clientTest (); }}J'espère que cet article sera utile à tout le monde d'apprendre la programmation Java.