Dateien über TCP/IP senden

Status
Nicht offen für weitere Antworten.

mukkerson

Mitglied
Hallo liebe java community,

ich arbeite gerade an einem Projekt, wo über eine GUI mehere .xml Dateien versenden soll. Meine GUI ist schon so halbwegs am laufen, jedoch sieht diese noch nicht Optimal aus, aber das werde ich anschließend beheben.
Ich will ich nur kurz noch erklären wie diese GUI funktioniert:
man hat 2 Buttons "Auswählen" und Auswählen 2". Bei dem "Auswählen" Button kann man nur einen Dateinamen in eine TextArea schreiben. "Auswählen 2" hat eine JList, die mehrere Dateinamen einträgt.
Nun ist mein Ziel den Inhalt der Dateinamen über TCP zu versenden. Fürs erste Habe ich das HyperTerminal genommen, welche eine TCP/IP Verbindung über einen Port herstellen kann. Meine eigentlich Frage ist jetzt wie soll ich jetzt anfangen und wo vor allem ich wurde nicht schlauer aus meinem JAVA-Buch... :( ich sitze hier schon seit 3
Tagen an dem selben Problem langsam werde ich depri ...

Ich poste euch mal meinen Quellcode:

[HIGHLIGHT="Java"]import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;

import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileView;
import javax.swing.text.JTextComponent;

public class TVorklassifikator extends JFrame implements ActionListener
{


private JList nameList;
private DefaultListModel nameListModel;
//private Vector<String> nameListModel;
private JTextComponent file1;

public TVorklassifikator()
{
super("TVorklassifikator");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

GridBagConstraints constraints = new GridBagConstraints();
setLayout(new GridBagLayout());

constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.gridheight = 2;
constraints.insets = new Insets(0, 2, 0, 2);
Label header = new Label("TVorklassifikator");

header.setFont(new Font("Arial",Font.BOLD, 16));
add(header, constraints);

constraints.gridheight = 4;
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.anchor = GridBagConstraints.WEST;
constraints.insets = new Insets(5, 5, 5, 5);
JButton choose1 = new JButton("Auswählen");
choose1.addActionListener(this);
add(choose1, constraints);

constraints.gridwidth = GridBagConstraints.RELATIVE;
constraints.gridheight = 4;
constraints.anchor = GridBagConstraints.WEST;
constraints.insets = new Insets(5, 5, 5, 5);
JLabel labelFile = new JLabel("Datei 1:");
add(labelFile, constraints);


constraints.gridheight = 8;
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.insets = new Insets(5, 5, 5, 5);
file1 = new JTextField(" ");
add(file1, constraints);

constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.gridheight = 4;
constraints.insets = new Insets(5, 5, 5, 5);
constraints.anchor = GridBagConstraints.WEST;
JButton choose2 = new JButton("Auswählen 2");
choose2.addActionListener(this);
add(choose2, constraints);

constraints.gridwidth = GridBagConstraints.RELATIVE;
constraints.gridheight = 4;
constraints.anchor = GridBagConstraints.WEST;
JLabel labelFile2 = new JLabel("Datei 2:");
add(labelFile2, constraints);

constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.gridheight = 4;
constraints.anchor = GridBagConstraints.WEST;
nameListModel = new DefaultListModel();
nameList = new JList(nameListModel);
//nameListModel = new Vector<String>();
JScrollPane fileName = new JScrollPane(nameList);
add(fileName, constraints);

constraints.gridwidth = GridBagConstraints.RELATIVE;
constraints.gridheight = 4;
constraints.anchor = GridBagConstraints.WEST;
constraints.insets = new Insets(5,5,5,5);
JButton deleteAll = new JButton("Alle Einträge entfernen");
deleteAll.addActionListener(this);
add(deleteAll,constraints);

constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.gridheight = 4;
constraints.anchor = GridBagConstraints.EAST;
constraints.insets = new Insets(5,5,5,5);
JButton delete = new JButton("Eintrag entfernen");
delete.addActionListener(this);
add(delete,constraints);

constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.gridheight = 4;
constraints.anchor = GridBagConstraints.EAST;
constraints.insets = new Insets(20, 30, 20, 30);
JButton end = new JButton("Ende");
end.addActionListener(this);
add(end, constraints);

constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.gridheight = 4;
constraints.anchor = GridBagConstraints.EAST;
constraints.insets = new Insets(20, 30, 20, 30);
JButton send = new JButton("Senden");
send.addActionListener(this);
add(send, constraints);



setSize(700, 650);
setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e)
{
String cmd = e.getActionCommand();

System.out.println("cmd: " + cmd);

if(cmd.equals("Auswählen"))
{
JFileChooser fc = new JFileChooser();
fc.setCurrentDirectory(new File("."));
fc.setFileFilter(new MyFileFilter());
if(fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
{
File f = fc.getSelectedFile();

file1.setText(f.getName());

}
}
if(cmd.equals("Auswählen 2"))
{
JFileChooser fc = new JFileChooser();
fc.setCurrentDirectory(new File("."));
fc.setFileFilter(new MyFileFilter());
if(fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
{
File f2 = fc.getSelectedFile();

nameListModel.addElement(f2.getName());
// nameListModel.add(f2.getName());
// nameList.setListData(nameListModel);

}
}

if(cmd.equals("Ende"))
{
int n = JOptionPane.showConfirmDialog(
this, "Anwedung wirklich beenden?", "Ende",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if(n == JOptionPane.YES_OPTION)
System.exit(0);
}
if(cmd.equals("Alle Einträge entfernen"))
{

nameList.setModel(nameListModel);
nameListModel.removeAllElements();

}
if(cmd.equals("Eintrag entfernen"))
{
int[] indices = nameList.getSelectedIndices();
for(int i = indices.length - 1; i >= 0; i--)
{
nameListModel.removeElementAt(indices);
}
}
}
public class MyFileFilter extends FileFilter
{
public boolean accept(File file)
{
if(file.isDirectory())
return true;
String name = file.getName();

if(name.endsWith(".xml"))
return true;
else
return false;
}

public String getDescription()
{
return "Text file(*.xml)";
}
}

public static void main(String[] args)
{
new TVorklassifikator();
}
}
[/HIGHLIGHT]


Ich bedanke mich schonmal bei euch im voraus ;)
 
T

tuxedo

Gast
>> Meine eigentlich Frage ist jetzt wie soll ich jetzt anfangen

Wie wär's mit in der Java API Doc mal nach "Socket" und "SocketServer" zu schauen. Gleich danach noch diverse Input und OutputStreams unter die Lupe nehmen.

Es schadet auch nicht Google mal nach "java socket dateitransfer" zu befragen.

Wenn du dann eine konkrete Frage oder ein Problem hast helf ich gerne weiter.

Gruß
Alex

P.S. Kleiner Tipp: Der Google-Suchbefehl liefert im 2. Suchergebnislink ein Beispielcode den du mal unter die Lupe nehmen könntest.
 

mukkerson

Mitglied
vielen dank der tipp hat mich ziemlich weitergebracht. nun versteh ich aber noch nicht so genau, wie wie ich mehrere dateien aus der liste versende. soll ich da nun eine schleife verwenden oder wie soll das dann aussehen?
 
T

tuxedo

Gast
Da wirst du ein "Protokoll" brauchen.

Ein Einfaches Protokoll sieht so aus:

4 bytes -> Integer -> Länge des Dateinamens
x bytes -> String -> Dateiname
4 bytes -> Integer -> Größe der Datei in bytes (Achtung: Dateien mit mehr als Integer.MAX_VALUE sind problematisch. Da am besten auf Long ausweichen :bae: )
x bytes -> viele bytes -> Datei selbst

Davon kannst du mehrere Blöcke schicken und an der Gegenüberliegenden Seite "auswerten".

DataInputStream und DataOutputStream sind die da behilflich. Vermeide auf jedenfall Printwriter und solche "Scherze" wenn du binäre Daten überträgst.

- Alex
 

mukkerson

Mitglied
Hi,

das mit dem Protokoll verstehe ich noch nicht so ganz :(
also ich weiß nicht genau, wie du das meinst und wie ich das ansatzweise anlege so ein protokoll.
ich entschuldige mich für meine unwissenheit, aber für mich ist das alles hier ein wenig neuland.

gruß mukkerson
 

dayaftereh

Top Contributor
Hey

Also das mit dem Protokoll ist so gemeint, Wenn du eine Datei über einen Socket Schickst weiß du ja nicht wie lang sie ist (Bytes) oder wenn du ersten den datei namen schicken willst, weiß der gegenüber ja nich wie viele bytes kommen. Des wegen eine Konzept zum schicken der Datein (Protokol) .

Ich würde es so machen.

x Bytes -> DateiNamen
0 Byte -> ende des Namens
4 Bytes - Integer -> Länge der Datei (vieliecht auch 8 bytes Long für große Datein)
x Bytes -> Die Datei

und dan die nägste Datei^^

vieliecht hilft es
 

mukkerson

Mitglied
hi ,
wie soll ich denn damit genau anfangen, weil ich weiß ehrlich gesagt gar nicht wie ich das syntaktisch jetzt aufbaue. In meinem JAVA-Buch ist das thema socket und server ganz knapp nur angeschnitten und ich weiß nicht wie ich jetzt genau anfange. :(
 

mukkerson

Mitglied
also ich wurde aus dem tutorial ein wenig schlauer, aber ich weiß immer nocht nicht genau, wie ich anfangen soll :( bin ich blöd ? :D
 

dayaftereh

Top Contributor
Ich denke mal die erste Überlegung ist, welches Grundprotokol verwendest du: TCP/IP oder UDP. ich würde dir raten TCP/IP zu nehmen.

Hier mal eine Kleines Tut... wie man zwei zahlen verschickt.
Michael Peuss - Socket-Programmierung in Java

Bei TCP/IP brauchst du eine Server der auf die Verbindung wartet also einen ServerSocket hat. bei dem Client brauhcst du nur eine Socket. So dan baut der Client die Verbindung zum Server auf, der Server schickt dem Client die daten und schlißt dan den Socket wieder.

So würde ich es machen! Wenn du nicht weiter kommst scheibe ich dir gerne mal ein Beispiel.
 

mukkerson

Mitglied
jaa das verstehe ich ja soweit und kann alles nachvollziehen, aber sobald ich dann auf mehere dateien zugreifen möchte und die an das Hyperterminal senden will scheitere ich an der umsetzung.
also ich habe mir gedacht, dass ich die dateien über die while-schleife einzeln rüberschicke.
eine xml-datei habe ich ja bereits verschickt, aber ich will halt mehrere rüberschicken und die muss ich ja vorher erstmal einlesen und dann den inhalt an das hyperterminal versenden.

[HIGHLIGHT="Java"]public void sendFiles(Socket servsock) throws IOException
{
File file = new File("C:\\Dokumente und Einstellungen\\Benutzer\\workspace\\TVorklassifikator");


BufferedReader r = new BufferedReader(
new FileReader("TestDFJob.xml"));
PrintWriter w = new PrintWriter(servsock.getOutputStream());
String line;


while ((line = r.readLine()) != null)
{
w.println(line);
}
w.flush();

servsock.close();






}[/HIGHLIGHT]
ich verschicke ja im moment nur eine datei und die gebe ich auch direkt an ( also den namen der xml-datei)
ist die umsetzung bei dem tutorial mit den zahlen genauso möglich mit dateien?
 

dayaftereh

Top Contributor
Also erstmal, brauchst du ja eine liste mit den Datei, ich meine damit alle Pfade zu den datein. Dann liest du stück für stück alle Datein byte weiße ein und veschiebst sie zu gleich über den Socket. Naturlich wenn du mehere verschicken willst musst du dir noch einen Platzhalter bauen um zu wießen wann die erste fertig ist^^

Also morge mache ich mal ein Beispiel^^
 

FArt

Top Contributor
Das Rad existiert bereits und runder wird es nicht mehr.
Warum plain TCP/IP? Es gibt fertige Protokolle und APIs, die für eine Dateitransfer besser geeignet sind... FTP, SCP, ...
Tipp: Apache FtpServer - Index
 

dayaftereh

Top Contributor
Ok, also ich habe dir jetzt ein funktioniren Beispiel gemacht. Hoffe du kannst das zu Übungs zwecken benutzen. Der Code ist nicht würglich sauber, aber hoffe lesbar. Bitte beachte nicht die ganzen Rechtscheibfehler.

Ich habe es so aufgebaut. Dem Server gibst du eine Port (Der Server Port) und eine Pfad zu einem Ordner mit(Ordener mit den zu verschickenen datein) als Start Parameters. Der Server wartet dan auf Verbindungen. Er kann auch mehere Clients gleichzeitig bedienen.(Muti-Threading).

Dem Client gibtst du als Start Paramter Port des Server,Ip des Servers und eine Ordner wo er die ankommenden Datein ablegen soll^^ Ich habe das In Eclipse gemacht, wenn du willst kann ich dir auch das Projekt exportiren.

Also Hier erstmal den Server:

Server.java
Code:
import java.io.File;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server implements Runnable {

	private boolean started = true;

	private int port = 0;

	private File folderPath = null;

	private ServerSocket serverSocket = null;

	public Server(int port, File folderPath) {
		this.port = port;
		this.folderPath = folderPath;
	}

	public void run() {
		System.out.println("Send Folder: " + folderPath.getAbsolutePath());

		try {
			/* Erzeugt den ServerSocket */
			serverSocket = new ServerSocket(port);
			while (started) {

				/* Wartet auf eigehenede Verbindungen */
				Socket s = serverSocket.accept();

				/* Erzugt eine neue ServerSession */
				newSession(s);

				/* Lest den Thread kurz Schlafen */
				sleep(10);
			}

		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	private void newSession(Socket s) {

		System.out.println("new Session for " + s.getInetAddress().getHostAddress());

		/* Erzugt die neue ServerSession mit dem Socket und den Path zum Folder */
		ServerSession session = new ServerSession(s, folderPath);

		/* Startet den Thread */
		Thread t = new Thread(session);
		t.start();
	}

	private void sleep(long millis) {
		try {
			Thread.sleep(millis);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {

		/* Prüfe args auf die Wichtigen Info */

		if (args.length != 2) {
			System.out.println("Usage: PORT FILE_FOLDER");
			return;
		}

		/* Holde sich den Port */
		int port = Integer.parseInt(args[0].trim());

		/* Prüft ihn */
		if (port <= 0) {
			System.err.println("Unkown Port!");
		}

		/* Hold sich den Pfad zum Folder mit den Zu sendenen Datein */
		File f = new File(args[1].trim());

		/* Prüft ob der Ordner existirt */
		if (f == null || f.exists() == false || f.canRead() == false) {
			System.err.println("Can't find File Folder:" + f.getAbsoluteFile());
			return;
		}

		/* Erzugt den Server mit Port und den Folder */
		Server server = new Server(port, f);

		/* Starte den ServerThread um auf dem Port zu hören */
		Thread t = new Thread(server);
		t.start();

		System.out.println("Listening on " + port);

	}

}

Jetzt noch die ServerSession.java
Code:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;

public class ServerSession implements Runnable {

	private Socket s = null;
	private File folderPath = null;

	private DataOutputStream out = null;
	private DataInputStream in = null;

	public ServerSession(Socket s, File folderPath) {
		this.s = s;
		this.folderPath = folderPath;
	}

	/**
	 * Öffnet die Beiden Streams
	 */
	private void openStream() {
		try {
			if (out == null) {
				/* new DataOutputStream */
				out = new DataOutputStream(s.getOutputStream());
			}
			if (in == null) {
				/* new DataInputStream */
				in = new DataInputStream(s.getInputStream());
			}
		} catch (IOException e) {
			e.printStackTrace();
			/* Wenn fehler dan Disconnected */
			disconnect();
		}
	}

	public void run() {

		/* Öffnet jetzt die Streams zum lesen & Schrieben */
		openStream();

		/* Hold sich alle Files aus dem Folder */
		File[] files = folderPath.listFiles();

		/* Durchleuft die File Liste */
		for (File file : files) {
			try {
				/* Sende Jedes File */
				sendFile(file);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		/* Schlißt dan die Verbindung */
		disconnect();

	}

	/**
	 * Zum Schicke einer Datei uber den Socket
	 * 
	 * @param f
	 *            - Die Datei als {@link File}
	 * @throws IOException
	 */
	private void sendFile(File f) throws IOException {
		/* Prüft ob es diese Datei gibt */
		if (f == null || f.exists() == false || f.canRead() == false) {
			System.err.println("Can't find File: " + f.getAbsolutePath());
			return;
		}

		/* Hold sich die länge der Datei in Bytes */
		long length = f.length();

		/* Scheibt nun den File Name raus */
		out.writeBytes(f.getName());
		/* Null Byte um zusagen das der Filename zu ende ist */
		out.write(0);
		/* Scheibt die länge der Datei raus */
		out.writeLong(length);

		/* Hold sich die Datei als Stream */
		FileInputStream in = new FileInputStream(f);

		int i = 0;

		/* Scheibt byte für byte die Datei raus */
		while ((i = in.read()) != -1) {
			out.write(i);
		}

		/* Schlißt den Datei Stream */
		in.close();

	}

	/**
	 * Räumt einfach nur auf und schließ alle Verbindungen
	 */
	public void disconnect() {

		System.out.println(s.getInetAddress().getHostAddress() + " Disconnect!");

		try {
			if (out != null) {
				out.close();
			}
			if (in != null) {
				in.close();
			}
			if (s != null) {
				s.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

So jetzt noch der Client.java

Code:
import java.io.File;
import java.io.IOException;
import java.net.Socket;

public class Client {

	private int port = 0;
	private String ip = null;
	private File saveFolder = null;

	public Client(int port, String ip, File saveFolder) {
		this.ip = ip;
		this.port = port;
		this.saveFolder = saveFolder;
	}

	/**
	 * Fürt die Verbindung zum Server durch
	 */
	public void connect() {
		System.out.println("Recevi Folder: " + saveFolder.getAbsolutePath());

		try {
			/* Erzugt den Socket zum Server */
			Socket s = new Socket(ip, port);

			System.out.println("Connected to " + ip + " on " + port + "!");

			/* Erstellt die ClientSession um die Dateien an zu nehmen */
			ClientSession session = new ClientSession(s, saveFolder);

			/* Started den Thread */
			Thread t = new Thread(session);
			t.start();

			System.out.println("Session Started!");

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		/* Schaut ob alle args aa sind */
		if (args.length != 3) {
			System.out.println("Usage: IP PORT RECEIV_FOLDER");
			return;
		}

		/* Hold sich die IP-Adresse */
		String ip = args[0].trim();

		/* Prüft ob sie nicht null oder empty ist */
		if (ip == null || ip.equals("")) {
			System.err.println("Unkown IP.");
			return;
		}

		/* Hold sich den Port */
		int port = Integer.parseInt(args[1].trim());

		/* Prüft ob er nicht klein oder Gliche 0 ist */
		if (port <= 0) {
			System.err.println("Unkown Port.");
			return;
		}

		/* Hold sich den Folder wo die Dateien gespeicher Werden */
		File saveFolder = new File(args[2].trim());

		/* Prüf ob dieser existir und man auf ihn schieben kann */
		if (saveFolder == null || saveFolder.exists() == false || !saveFolder.canWrite()) {
			System.err.println("Can't finde Receiv Folder");
			return;
		}

		/* Erzugt eine Klient um sich dan mit dem Server zu verbinden */
		Client client = new Client(port, ip, saveFolder);

		/* Führt die Verbindung zum Server aus */
		client.connect();

	}

}

und noch die ClientSession.java

Code:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.Socket;

public class ClientSession implements Runnable {

	private boolean started = true;

	private File saveFolder = null;

	private DataOutputStream out = null;
	private DataInputStream in = null;

	private Socket s = null;

	public ClientSession(Socket s, File saveFolder) {
		this.s = s;
		this.saveFolder = saveFolder;
	}

	/**
	 * Öffnet die Beiden Streams
	 */
	private void openStream() {
		try {
			if (out == null) {
				out = new DataOutputStream(s.getOutputStream());
			}
			if (in == null) {
				in = new DataInputStream(s.getInputStream());
			}
		} catch (IOException e) {
			e.printStackTrace();
			disconnect();
		}
	}

	public void run() {

		/* Öffnet jetzt die Streams zum lesen & Schrieben */
		openStream();

		/* Started die Schiefe zum einlesen der Datein */
		while (started) {

			try {
				/* List immer nur eine Datei ein */
				receivFile();
			} catch (IOException e) {
				e.printStackTrace();
				disconnect();
			}

			sleep(10);
		}
	}

	/**
	 * List immer nur eine vom {@link DataOutputStream}
	 * 
	 * @throws IOException
	 */
	private void receivFile() throws IOException {

		/* Erzeugt eine StringBuffer um den Datei namen zu lesen */
		StringBuffer sb = new StringBuffer();

		int i = 0;

		/* Liest byte weiße den Dateiname vom DataInputStream */
		while ((i = in.read()) > 0) {
			sb.append((char) i);
		}

		String fileName = sb.toString();

		/* Prüft ob der Dateiname nicht leer ist */
		if (fileName == null || fileName.equals("")) {
			throw new IOException("File Name is empty");
		}

		/* erzeugt erstmal den Pfad zu neuhen Datei */
		File f = new File(saveFolder.getPath() + "/" + fileName);

		/* Erstellt nun die neue datei */
		if (!f.createNewFile()) {
			throw new IOException("Can't create File: " + f.getAbsoluteFile());
		}

		/* List nun byte weiße die Länge der Datei ein */
		long length = in.readLong();

		/* Öffnent eine Stream zu neuen datei */
		FileOutputStream out = new FileOutputStream(f);

		long c = 0;

		/* List nun byte für byte vom DataInputStream in unser neue Datei */
		while (c < length) {
			out.write(in.read());
			c++;
		}

		/* Schlißt nun die neue Datei */
		out.close();

		System.out.println("Receiv File: " + f.getAbsoluteFile());
	}

	/**
	 * Räumt einfach nur auf und schließ alle Verbindungen
	 */
	public void disconnect() {
		started = false;
		try {
			if (out != null) {
				out.close();
			}
			if (in != null) {
				in.close();
			}
			if (s != null) {
				s.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void sleep(long millis) {
		try {
			Thread.sleep(millis);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}

So wie gesagt, der Code ist nicht der Beste^^ Hoffe es Hilft dir
 
Zuletzt bearbeitet:

mukkerson

Mitglied
sauber ich hab alles hinbekommen, so wie ich es wollte :) danke für das beispiel und den ganzen support einfach nur super wie schnell man hier lernen kann
vielen dank und schöne grüße mukkerson
p.s. schönes wochenende ;)
 

FArt

Top Contributor
Ich finde es gut, dass dayaftereh hier so viel Vorarbeit geleistet hat, damit du aus Übungszwecken einen Dateitransfer verwenden kannst....aber was willst du üben?
Der Transfer an sich ist ja jetzt schon fertig. Der Code ist nicht besonders sauber, besonders im Umgang mit den Stream-Ressourcen. Das hat der Poster ja schon angemerkt, aber für dich scheint die Arbeit erledigt. denn du hast "... alles hinbekommen wie gewollt"... oder?
Mein Vorschlag: wenn üben, dann richtig.

just my 2 cents...
 

Daniel.Deng

Mitglied
Ich würde dir vorschlagen, ein Framework zu nehmen. Es gibt sehr leichte Framework für Socketkommunikation z.B. Quickserver (siehe Quickstart bei .:: QuickServer ::. QuickStart), oder Apache MINA. Sie unterstüzt die Transportierung von einem allgemeinem Object und daraus kannst du zu deinem eignem Class (oder bei dir wahrscheinlich ArrayList) konvertieren.

Es gibt noch anderen wie Cindy, Netty usw.

Wenn du nicht genügent Zeit um Socketprogramierung zu lernen hast, kannst du direkt die nehmen. Ich würde davon Quickserver und MINA empfehlen.

Wir haben schon mehrere Projekt damit gemacht, und man braucht fast nur auf Business Logic zu konzentrieren.
Viel Erfolg!
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Mehrere Dateien über einen Socket senden Netzwerkprogrammierung 2
B Zip Dateien über FTP laden Netzwerkprogrammierung 2
J Socket Dateien über Socket auf Server speichern Netzwerkprogrammierung 3
G Probleme mit Firewall beim empfangen von dateien über socket Netzwerkprogrammierung 6
C Dateien über Sockets versenden? Netzwerkprogrammierung 10
C Verzeichnisstrukturen & Dateien über Socketverb. übertra Netzwerkprogrammierung 12
T MP3 Dateien Stream Netzwerkprogrammierung 3
I Kleine Dateien senden Netzwerkprogrammierung 3
F HTTP HTTP-Download: Dateien in einem Verzeichnis ermitteln Netzwerkprogrammierung 8
D Aus einer URL die Dateien lesen Netzwerkprogrammierung 5
D HTTP Checksumme von Dateien abfragen Netzwerkprogrammierung 2
Semox HTTP Webserver: Externe Dateien werden nicht verwendet. Netzwerkprogrammierung 10
Weltall 7 HTTP Dateien an PHP-Skript senden Netzwerkprogrammierung 11
J Mit der File Api Dateien von anderen Rechnern lesen ? Netzwerkprogrammierung 3
V Problem beim Senden von Dateien Netzwerkprogrammierung 4
E Upload großer Dateien? Netzwerkprogrammierung 5
D dateien kopieren, am localhost funktionierts, im netz nicht Netzwerkprogrammierung 2
J Java Programm für Upload von Dateien per HTTP Netzwerkprogrammierung 7
M dateien übertragen, probleme mit versch. Strömen? Netzwerkprogrammierung 4
V Dateien Auflisten Netzwerkprogrammierung 3
flashfactor Dateien im Netzwerk kopieren Netzwerkprogrammierung 2
I Dateien schnell/synchron senden Netzwerkprogrammierung 2
S Dateien versenden Netzwerkprogrammierung 16
S Dateien auf einem HTTP Server Netzwerkprogrammierung 2
N *.* Dateien versenden im Lan Netzwerkprogrammierung 5
O Dateien von einem Server laden Netzwerkprogrammierung 3
T Dateien wia P2P Connection versenden Netzwerkprogrammierung 2
W Server schickt Dateien jede 3 Sekonden Netzwerkprogrammierung 3
A FileSend - Dateien verschicken Netzwerkprogrammierung 19
K Tabelle im Web über Listener aufrufen Netzwerkprogrammierung 1
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
L Webbasierte Anwendung - Authentifizierung über LDAP/ActiveDirectory Netzwerkprogrammierung 5
J Probleme mit Multicast über IPv6, DatagramChannel Netzwerkprogrammierung 1
S Daten über TCP/IP senden Netzwerkprogrammierung 3
T Broadcast-message über spez. Netzwerk-Schnittstelle Netzwerkprogrammierung 1
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
M Erstelltes Programm über Internet Browser ausführen Netzwerkprogrammierung 26
T VPN-Verbindung über Java Netzwerkprogrammierung 4
V Einfachen Javaserver über das Internet erreichbar machen Netzwerkprogrammierung 2
J FTP Upload über Proxy funktioniert nicht Netzwerkprogrammierung 1
E Kurze Textnachrichten über einen Server von meinem Handy auf den Computer laden. Netzwerkprogrammierung 9
J FTP FTP Zugriff über Proxy Server Netzwerkprogrammierung 1
Thallius Java Application über ZScaler benutzer? Netzwerkprogrammierung 0
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
antonbracke Multiuser Software über XMPP Server Netzwerkprogrammierung 1
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
cezary Socket ServerSocket starten über GUIIm unterstehenden Code versuche Netzwerkprogrammierung 6
I ASCII über serielle Schnittstelle Netzwerkprogrammierung 1
N RMI "RMI über Lan funktioniert nicht" & "RMI-Server im Lan scannen" Netzwerkprogrammierung 13
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
T Socket Methoden über Internet aufrufen Netzwerkprogrammierung 1
S Socket Kommunikation über Internet Netzwerkprogrammierung 1
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
K ByteArray über Netzwerk senden klappt nicht Netzwerkprogrammierung 5
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
P RMI Threads die über RMI auf Datenbank zugreifen Netzwerkprogrammierung 2
S Datei schreiben über Applet Netzwerkprogrammierung 8
G Klassen über Netzwerk kommunizieren lassen Netzwerkprogrammierung 6
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Class über Netzwerk verschicken Netzwerkprogrammierung 2
D JNLP über Webstart funktioniert nicht... Netzwerkprogrammierung 2
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
A Computer über Internet verbinden Netzwerkprogrammierung 12
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
c_sidi90 ideale Lösung, Screen Capture über Netzwerk Netzwerkprogrammierung 3
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
T ArrayList über Netzwerk senden! Netzwerkprogrammierung 5
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
T Verbindungsversuche über TCP Sockets von mehreren Threads führt zu Serverabsturz Netzwerkprogrammierung 2
V Authentifikation über mehrere Server? Netzwerkprogrammierung 3
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
M Map über Webservice übertragen Netzwerkprogrammierung 3
D Mehrere Clients über Java-Sockets Netzwerkprogrammierung 13
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
ruffio1978 Telnet über ein socket ansprechen Netzwerkprogrammierung 8
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
G Klassen über JMX per URLClassloader laden? Netzwerkprogrammierung 2
E Zwei PCs über das Internet miteinander verbinden? Netzwerkprogrammierung 3
E Socketverbindung über das Internet - Timeout? Netzwerkprogrammierung 28
M Socket Bilder über das Netzwerk übertragen Netzwerkprogrammierung 4
E Java über Socket ins Internet? Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
M Socket JavaProg über einen Clienten steuern Netzwerkprogrammierung 5
M Mail über Exchange versenden Netzwerkprogrammierung 13
F C/S über HTTPS Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben