Java: Übertragung einer Datei vom server zum client und vom client zum server
Ich bin ein Neuling, und ich möchte erreichen Dateiübertragung vom server zum client "etwas tun" und dann senden Sie die Datei an den server zurück. Die meisten basic-code, den ich verwende, ist hier:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Main {
public static void main(String[] args) throws IOException {
ServerSocket servsock = new ServerSocket(123456);
File myFile = new File("s.pdf");
while (true) {
Socket sock = servsock.accept();
byte[] mybytearray = new byte[(int) myFile.length()];
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(myFile));
bis.read(mybytearray, 0, mybytearray.length);
OutputStream os = sock.getOutputStream();
os.write(mybytearray, 0, mybytearray.length);
os.flush();
sock.close();
}
}
}
The client module
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.Socket;
public class Main {
public static void main(String[] argv) throws Exception {
Socket sock = new Socket("127.0.0.1", 123456);
byte[] mybytearray = new byte[1024];
InputStream is = sock.getInputStream();
FileOutputStream fos = new FileOutputStream("s.pdf");
BufferedOutputStream bos = new BufferedOutputStream(fos);
int bytesRead = is.read(mybytearray, 0, mybytearray.length);
bos.write(mybytearray, 0, bytesRead);
bos.close();
sock.close();
}
}
Habe es von dieser website: http://www.java2s.com/Code/Java/Network-Protocol/TransferafileviaSocket.htm
Ich verstehe, wie dies funktioniert, aber ich weiß nicht, wie das senden einer Datei an den server zurück.
Bitte helfen Sie.
sockets sind bi-direktional. halten Sie es öffnen und Lesen der Antwort vom server.
Ich würde Ihnen empfehlen die Verwendung von HTTP und dein "server" ist ein einfaches servlet. Dann Lesen Sie einfach die Anfrage-und Antwort-die Antwort, die das servlet API macht den rest für Sie (und auf dem client die HTTPURLConnection oder andere HTTPClient-code).
so kann ich weglassen, die Socke.close() auf server und client und fügen Sie die reverse-Ketten, die schreiben und Lesen der Daten?
danke für die Empfehlung, aber glaubst du, es wäre möglich, dies zu lösen, ohne Verwendung von HTTP?
sicher, es ist. auf dem server öffnen Sie einfach ist = Buchse.getInputStream() und os = socket.getOutputStream(). Lesen, schreiben zu den anderen. ES ist nur, dass es eine Menge von zusätzlichen Dinge, die Sie brauchen, in der Produktion, um es zuverlässig.
Ich würde Ihnen empfehlen die Verwendung von HTTP und dein "server" ist ein einfaches servlet. Dann Lesen Sie einfach die Anfrage-und Antwort-die Antwort, die das servlet API macht den rest für Sie (und auf dem client die HTTPURLConnection oder andere HTTPClient-code).
so kann ich weglassen, die Socke.close() auf server und client und fügen Sie die reverse-Ketten, die schreiben und Lesen der Daten?
danke für die Empfehlung, aber glaubst du, es wäre möglich, dies zu lösen, ohne Verwendung von HTTP?
sicher, es ist. auf dem server öffnen Sie einfach ist = Buchse.getInputStream() und os = socket.getOutputStream(). Lesen, schreiben zu den anderen. ES ist nur, dass es eine Menge von zusätzlichen Dinge, die Sie brauchen, in der Produktion, um es zuverlässig.
InformationsquelleAutor meowtwo | 2014-11-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich geschrieben habe, ein file-transfer-Klasse in der Vergangenheit, können Sie es sowohl in der client und server (eine Instanz) und die Methoden zum senden und empfangen von Dateien so viel wie Sie wollen.
flush()
vorclose()
ist überflüssig, wie istsocket.close()
nach dem schließen entweder die input-oder output-streams.IOExceptions
sollten nie gerade sein, drehte sich in Boolean: Sie sollten protokolliert werden. Ressourcen geschlossen werden sollten, infinally
Blöcke. Das Muster dertry/catch
und dann mehr code ist schlechte Praxis. Code, der setzt auf den Erfolg von code in einemtry
Blocks sollte innerhalb des gleichentry
block.Ich bin damit einverstanden, danke. Ich schrieb eine Weile zurück und erinnere mich, es funktionierte für die meisten Teil, so habe ich nicht die Mühe zu schauen, zu tief hinein. Ich werde verfeinern Sie es mit Ihren Empfehlungen, sobald ich die Zeit habe.
InformationsquelleAutor Augustin Grigorov