Ich schreibe gerade an einem Programm, mit dessen Hilfe ich Dateien von einem PC an einen anderen PC übermitteln kann.
Hierzu habe ich als aller erstes einen Server. Wenn dieser eine Verbindung zu einem Client aufbaut, hält er ihn erst mal so lange, bis ich dem Server gesagt habe, welche Datei er senden soll.
Jetzt hat der Client die Datei und schreibt sie auf den Desktop. Thema beendet.
Nun möchte ich es aber so einrichten, dass der User aus einer Liste von verbundenen Clients auswählen kann, wem er die Datei sendet.
Es ergibt sich also ein Problem: Wenn der eine Client noch gehalten wird, kann der andere nicht connecten.
Außerdem, wie soll ich dem Server sagen, dass er die Datei an einen bestimmten Socket weiterleiten soll?
Ich habe überlegt, dass ich es mit dem Senden vielleicht so machen kann:
Ich überprüfe, ob er aktuelle Socket dieselbe IP-Adresse wie der ausgewählte User hat; hat er sie, wird die Datei versandt, checkt er die anderen durch.
Irgendwie aber kommt mir diese Lösung auch nicht optimal vor, zumal ich dabei immer wieder connectete Sockets verliere.
Habt ihr einen besseren Vorschlag und könnt mir sagen, wie ich das multithreaden kann?
Anhang:
Darüber hinaus habe ich mit mal mit DCC (Direct Client-to-Client) beschäftigt, aber dafür gibt es leider keine Java-APIs.
Hierzu habe ich als aller erstes einen Server. Wenn dieser eine Verbindung zu einem Client aufbaut, hält er ihn erst mal so lange, bis ich dem Server gesagt habe, welche Datei er senden soll.
Java:
...
public Server()
{
while ( true )
{
Socket client = accept(); //Beschafft den Client
//Warten, bis ein Befehl gegeben wurde
while ( nochKeinBefehlGegeben )
{
Thread.sleep(1);
}
//Dem Client die Datei uebermitteln (per PrintWriter)
...
}
}
Nun möchte ich es aber so einrichten, dass der User aus einer Liste von verbundenen Clients auswählen kann, wem er die Datei sendet.
Es ergibt sich also ein Problem: Wenn der eine Client noch gehalten wird, kann der andere nicht connecten.
Außerdem, wie soll ich dem Server sagen, dass er die Datei an einen bestimmten Socket weiterleiten soll?
Ich habe überlegt, dass ich es mit dem Senden vielleicht so machen kann:
Ich überprüfe, ob er aktuelle Socket dieselbe IP-Adresse wie der ausgewählte User hat; hat er sie, wird die Datei versandt, checkt er die anderen durch.
Irgendwie aber kommt mir diese Lösung auch nicht optimal vor, zumal ich dabei immer wieder connectete Sockets verliere.
Habt ihr einen besseren Vorschlag und könnt mir sagen, wie ich das multithreaden kann?
Anhang:
Darüber hinaus habe ich mit mal mit DCC (Direct Client-to-Client) beschäftigt, aber dafür gibt es leider keine Java-APIs.