2011-01-16 8 views
3

Bald werde ich mit einem Single-Client-Chat-System als ein Freizeit-persönliches Projekt fertig sein, und ich frage mich ... Ist es einfach, so etwas zu konvertieren, um mehrere Clients zu haben, oder würde es eine große Neuschreibung erfordern?Multi-Client-Sockets in Java?

Und in jedem Fall, wie würdest du es tun? Bitte sei beschreibend! : D Danke!

Wie übertragen Sie auch Dateien über einen Socket?

Antwort

1

Es kann einfach sein, einen einzelnen Client in mehrere Clients zu konvertieren. Es hängt davon ab, wie Sie Ihre Bewerbung geschrieben haben. Da Sie eine Anwendung neu schreiben, die viele Male zuvor geschrieben wurde, nehme ich an, Sie haben keine Angst, Code neu zu schreiben, und Sie tun es als eine Lernübung.

Die einfachste Änderung wäre, dass wenn Sie jetzt einen Client akzeptieren(), sollten Sie eine Schleife verwenden, um viele Clients zu akzeptieren. (und übergibt die Verarbeitung dieses Clients an einen anderen Thread).

Um eine Datei über einen Socket zu übertragen, müssen Sie wie bisher eine Verbindung zum Server herstellen, die Datei lesen und den Inhalt an den Server senden. Anstatt Text-Chat-Nachrichten an den Empfänger zu übergeben, übergeben Sie eine Datei mit dem Inhalt der Datei.

+0

Danke! Also, um es Multi-Client zu machen, habe ich einen Thread, um die Clients zu akzeptieren, und einen anderen für die Kommunikation? Und das heißt, ich kann einfach den normalen Thread für die Kommunikation und einen zusätzlichen für die Annahme von Clients verwenden, oder muss ich zwei Threads instanziieren? –

+0

Sie können zwei Threads pro Verbindung verwenden, aber für den Chat benötigen Sie nur einen. –

+0

Wie kann ich einen der Threads stoppen, den Client-akzeptierenden Thread, während er 'accept()' ausführt? Ich kann nicht einfach die 'while'-Schleife eine Bedingung haben, da sie wartet, bis sie eine Verbindung hat. Muss ich eine Verbindung fälschen, um den Thread beenden zu können? –

2

Wenn Sie ein IM-System schreiben möchten, empfehle ich Ihnen, mit einem höheren Level protocol and API like Jabber/XMPP zu arbeiten. Here is the example Übertragung einer Datei über Socket.

+0

Obwohl es vielleicht besser ist, versuche ich es einfach mit Low-Level-Sockets. Das Dateiübertragungsbeispiel war hilfreich. –