Wie der transfer-Datei mit IOUtils.kopieren Sie die durch die Java-Sockets
Zurzeit arbeite ich mit Java-Sockets. Erstellt habe ich eine server-side-code-und client-Seite code transfer file über socket. Ich habe erfolgreich übertragen der Dateien vom client zum server mit dem gleichen system, aber wenn ich versuchte, mit der die verschiedenen Systeme in den unterschiedlichen Plattform, dann ist es nicht funktioniert. Die server-Seite und client-Seite-codes sind unten angegeben.
Server-side-code
public class FileTransferTestServer extends Thread{
private final Socket socket;
public FileTransferTestServer(Socket socket) {
//TODO Auto-generated constructor stub
this.socket = socket;
}
/**
* @param args
*/
public static void main(String[] args) {
//TODO Auto-generated method stub
try {
ServerSocket serverSocket = new ServerSocket(5000);
Socket socket = serverSocket.accept();
System.out.println("Connection Established with "+socket.getInetAddress().getHostAddress());
new FileTransferTestServer(socket).start();
serverSocket.close();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run(){
try {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String buffer = null;
String fileName = null;
if((buffer = br.readLine()) != null){
fileName = buffer;
}
FileOutputStream fos = new FileOutputStream(fileName);
int res = IOUtils.copy(is, fos);
System.out.println("res : "+res);
is.close();
fos.flush();fos.close();
br.close();
} catch (FileNotFoundException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Client-Side Code
public class FileTransferClient {
public FileTransferClient() {
//TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
//TODO Auto-generated method stub
try {
Socket socket = new Socket("172.16.4.23",5000);
File file = new File("/Users/Guest/Desktop/DQM.txt");
OutputStream outputStream = socket.getOutputStream();
PrintWriter out = new PrintWriter(outputStream);
out.println("file-transfer");
out.flush();
out.println(""+file.getName());
out.flush();
FileInputStream fis = new FileInputStream(file);
int res = IOUtils.copy(fis, outputStream);
out.flush();
outputStream.flush();
outputStream.close();
fis.close();
System.out.println("res : "+res);
socket.close();
} catch (UnknownHostException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Wie man dieses Programm zum übertragen von Dateien zwischen system
Ich habe versucht mit Windows (Server) & Mac OS X(Client) und Windows (Server) & LinuxMint(Client)
Hinweis :
1. Ich möchte zu senden, Datei-Name, gefolgt vom Inhalt der Datei.
2. Datei Inhalte in jeglicher form (Text-oder Binär-Datei)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man nicht mischen-test und binary im gleichen Strom, es sei denn, Sie wirklich wissen, was Sie tun. In diesem Fall wird der BufferedReader übernimmt Sie nur nutzen dieser Leser, von nun an und kann Sie Lesen, so viele Daten wie verfügbar ist. Dies bedeutet, es können Daten Lesen, sollen Sie für die Datei.
Schlage ich vor, Sie DataInput/Ausgabestrom, und nur diese. Sie können writeUtf/readUTF für den text.
Schreiben
Lesen