In diesem Artikel wird Java Socket-basiertes Dateiübertragungsfall vorgestellt und wird für Ihre Referenz mit Ihnen freigegeben. Der spezifische Inhalt ist wie folgt
1. Java -Code
Paket com.wf.demo.socket.socketfile; Java.net importieren.*; import Java.io.*; / ** * 2. Sockets Util Helfer Class * * @Author Willson * */ Public Class Clientsocket {private String ip; privater Int -Port; privater Socket Socket = Null; DataOutputStream out = null; DataNputStream getMessAsTeReam = null; public Clientsocket (String IP, int Port) {this.ip = ip; this.port = port; } / ** * Socket -Verbindung erstellen * * @throws Exception * Ausnahme * / public void createConNection () löst eine Ausnahme aus {try {Socket = new Socket (IP, Port); } catch (Ausnahme e) {e.printstacktrace (); if (socket! = null) socket.close (); werfen e; } endlich {}} // Sende eine Nachricht public void sendMessage (String sendMessage) löst eine Ausnahme aus {try {out = new DataOutputStream (socket.getOutputStream ()); if (sendMessage.equals ("Windows")) {out.writebyte (0x1); out.flush (); zurückkehren; } if (sendMessage.equals ("unix") {out.writebyte (0x2); out.flush (); zurückkehren; } if (sendMessage.equals ("linux")) {out.writebyte (0x3); out.flush (); } else {out.writeUtf (sendMessage); out.flush (); }} catch (Ausnahme e) {e.printstacktrace (); if (out! = null) out.close (); werfen e; } endlich {}} // Akzeptieren Sie die Nachricht public dataNputStream getMessAgestream () löst eine Ausnahme aus {try {getMessAgestream = new DataNputStream (neuer bufferedInputStream (socket.getInputStream ()); return getMessAgestream; } catch (Ausnahme e) {e.printstacktrace (); if (getMessAgestream! = null) getMessAgestream.close (); werfen e; } endlich {}} // Schließen Sie die Verbindung public void ShutdownConnection () {try {if (out! = null) out.close (); if (getMessAgestream! = null) getMessAgestream.close (); if (socket! = null) socket.close (); } catch (Ausnahme e) {}}} 2. Java -Code
Paket com.wf.demo.socket.socketfile; import Java.io.BufferedInputStream; importieren java.io.datainputstream; importieren java.io.dataoutputStream; Import Java.io.file; import Java.io.FileInputStream; importieren java.net.serversocket; importieren java.net.socket; / ** * 1. Server Seite * * @Author Willson * */ öffentliche Klasse Servertest {int port = 8821; void start () {Socket Socket = null; try {ServerSocket ServerSocket = new ServerSocket (Port); while (true) {// die Datei für Übertragungszeichenfolge filepath = "e: //lib.zip" aus auswählen; Datei fi = neue Datei (filepath); System.out.println ("Dateiname:" + fi.getName () + ";/tfile size ():" + (int) fi.length () + "Bytes"); // Public Socket Accept () löscht // ioException an und akzeptiert Verbindungen zu diesem Socket. Diese Methode blockiert, bis die Verbindung hergestellt wird. System.out.println ("Warten auf den Client, der eine Verbindung herstellt, Verbindungsport:" + Port); socket = serversocket.accept (); System.out.println ("Socket -Link erstellen"); DataNputStream dis = neuer DataNputStream (neuer BufferedInputStream (Socket.getInputStream ())); dis.readbyte (); DataNputStream fis = neuer DataNputStream (neuer BufferedInputStream (neuer FileInputStream (Filepath))); DataOutputStream ps = new DataOutputStream (Socket.getOutputStream ()); // Übergeben Sie den Dateinamen und die Länge an den Client. Um sich wirklich für alle Plattformen anzuwenden, wie z. B. die Verarbeitung chinesischer Namen, muss es auch verarbeitet werden. Weitere Informationen finden Sie unter Denken in Java // Es gibt einen vorbereiteten Code im 4. Platz. ps.writeuTF (fi.getName ()); ps.flush (); ps.WriteLong ((lang) 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 (); // Achten Sie darauf, den Socket -Link zu schließen. Andernfalls wartet der Client auf die kommenden Daten des Servers, // bis zum Socket -Timeout, was zu unvollständigen Daten führt. fis.close (); socket.close (); System.out.println ("Dateiübertragung abgeschlossen/n"); }} catch (Ausnahme e) {e.printstacktrace (); }} public static void main (string arg []) {new Servertest (). start (); }}
3. Kunde
Paket com.wf.demo.socket.socketfile; importieren java.io.bufferedOutputStream; importieren java.io.datainputstream; importieren java.io.dataoutputStream; importieren java.io.fileoutputStream; / ** * 3. Client * * @author Willson * */ public class clienttest {private Clientsocket cs = null; private string ip = "localhost"; // auf server IP private int port = 8821 einstellen; private String sendMessage = "windwos"; public ClientTest () {try {if (createConnection ()) {sendMessage (); getMessage ("f: //"); }} catch (Ausnahme ex) {ex.printstacktrace (); }} private boolean createConnection () {cs = new ClientSocket (IP, Port); try {cs.createconnection (); System.out.print ("erfolgreich mit dem Server verbunden!" + "/N"); zurückkehren; } catch (Ausnahme e) {System.out.print ("Herstellung mit dem Server fehlgeschlagen!" + "/n"); false zurückgeben; }} private void sendMessage () {if (cs == null) return; Versuchen Sie {cs.sendMessage (sendMessage); } catch (Ausnahme e) {System.out.print ("Meldung fehlgeschlagen!" + "/n"); }} private void getMessage (String SavePath) {if (cs == null) return; DataNputStream InputStream = NULL; try {inputStream = cs.getMessAgestream (); } catch (Ausnahme e) {System.out.print ("Meldungs -Cache -Fehler/n"); zurückkehren; } try {// Lokaler Speicherpfad, der Dateiname wird automatisch von der Serverseite erben. int buffersize = 8192; byte [] buf = new byte [buffersize]; int bestanden = 0; langer Len = 0; savePath += inputStream.readutf (); DataOutputStream FileOut = neuer DataOutputStream (neuer BufferedOutputStream (neuer BufferedOutputStream (neuer FileOutputStream (SavePath))); len = inputStream.readlong (); System.out.println ("Dateigröße ():" + len + "Bytes"); System.out.println ("Empfangen von Dateien!" + "/N"); while (true) {int read = 0; if (inputStream! = null) {read = inputStream.read (buf); } bestanden += read; if (read == -1) {break; } // Die folgende Fortschrittsleiste besteht aus der Fortschrittsbar der grafischen Schnittstelle. Wenn Sie hier eine Datei eingeben, können einige der gleichen Prozentsätze wiederholt system.out.println ("Datei empfangen" + (bestanden * 100 / len) + "% / n") werden; FileOut.Write (BUF, 0, Read); } System.out.println ("empfangen, Datei als" + savePath + "/n" empfangen,); FileOut.close (); } catch (Ausnahme e) {System.out.println ("Meldungsfehler empfangen" + "/n"); zurückkehren; }} public static void main (String arg []) {new ClientTest (); }}Ich hoffe, dieser Artikel wird für alle hilfreich sein, um Java -Programme zu lernen.