gewusst wie: implementieren von TCP-server und TCP-client in java, um Dateien zu übertragen
Ich habe umsetzen die einfachen TCP-server und TCP-client-Klassen, die können die Nachricht senden, vom client zum server und die Nachricht wird in Großbuchstaben konvertiert, die auf der server-Seite, aber wie kann ich erreichen, die übertragung von Dateien vom server zum client und upload von Dateien vom client zum server. die folgenden codes sind, was ich habe.
TCPClient.java
:
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String args[]) throws Exception {
String sentence;
String modifiedSentence;
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("127.0.0.1", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + "\n");
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
TCPServer.java
:
import java.io.*;
import java.net.*;
class TCPServer {
public static void main(String args[]) throws Exception {
int firsttime = 1;
while (true) {
String clientSentence;
String capitalizedSentence="";
ServerSocket welcomeSocket = new ServerSocket(3248);
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
//System.out.println(clientSentence);
if (clientSentence.equals("set")) {
outToClient.writeBytes("connection is ");
System.out.println("running here");
//welcomeSocket.close();
//outToClient.writeBytes(capitalizedSentence);
}
capitalizedSentence = clientSentence.toUpperCase() + "\n";
//if(!clientSentence.equals("quit"))
outToClient.writeBytes(capitalizedSentence+"enter the message or command: ");
System.out.println("passed");
//outToClient.writeBytes("enter the message or command: ");
welcomeSocket.close();
System.out.println("connection terminated");
}
}
}
So, die TCPServer.java
wird zuerst ausgeführt wird, und führen Sie dann die TCPClient.java
, und ich versuche, verwenden Sie die if-Klausel in der TCPServer.java
zu testen, was user ' s input,jetzt habe ich wirklich wollen, um zu realisieren, wie die übertragung von Dateien von beiden Seiten(download und upload).Danke.
Zusätzlich zu allen Antworten, können Sie Lesen, alle bytes einer Datei auf einmal mit readAllBytes(...) und schreibt Sie in eine Datei mit schreiben(...).
InformationsquelleAutor starcaller | 2011-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also nehmen wir an auf der server-Seite, die Sie erhalten haben, die Datei Namen und Datei Pfad. Dieser code sollte Ihnen eine Vorstellung.
SERVER
CLIENT
InformationsquelleAutor Vikrant Goel
Angenommen, Sie wollen weiter zu unterstützen, senden von Nachrichten, sowie das senden von Dateien hin und her...
Als Sie jetzt haben, Sie sind mit writeBytes zum senden von Daten vom client zum server.
Können Sie es verwenden, zu senden, alles andere, wie der Inhalt der Dateien...
Aber Sie brauchen, um zu definieren ein Protokoll zwischen dem client und server, so dass Sie wissen, Wann eine Datei, die übertragen wird, anstatt eine chat-Nachricht.
Zum Beispiel könnten Sie senden Sie die Nachricht/Zeichenkette "FILECOMING" vor dem senden einer Datei an den server, und es würde dann wissen, zu erwarten, dass die bytes für eine Datei. Ebenso brauchen Sie einen Weg, um zu markieren das Ende einer Datei zu...
Alternativ, Sie könnten eine Nachricht senden, geben Sie vor jeder Nachricht.
Mehr performant/ansprechende Lösung ist das file-transfer in einem separaten thread/Buchse - dies bedeutet, dass die chat-Nachrichten werden nicht aufgehalten durch die transfers. Wenn eine Datei übertragen wird, erforderlich, einen neuen thread/socket-Verbindung erstellt wird, nur für, die.
~chris
Im Idealfall müssten Sie einige getrennte Steckdosen zu handhaben Befehle. Die Art, wie es gemacht mit FTP ist, dass es ein Kommando-Kanal und einen Daten-Kanal.
InformationsquelleAutor Chris Kimpton
InformationsquelleAutor Thangarasu