Zum Inhalt springen

SocketException beim Objekt erstellen


Empfohlene Beiträge

Geschrieben

Nabend,

so ich bin grad hier dabei mal ein Chat Programm zu basteln und bin auf folgendes Problem gestoßen. Also ich habe einmal einen Server und einen Client, nun kann ich aber eine Nachricht nur einmal schicken und wird vom Server ausgegeben, beim zweiten mal kommt eine SocketException.


	public void sendMessage(Socket socket) {

		socket = this.socket;

		try {

			PrintWriter output = new PrintWriter(socket.getOutputStream(), true);

			String ausgabe = this.clientUi.textFieldEingabe.getText();

			output.print(ausgabe);

			output.close();

		} catch (SocketException e) {

			System.out.println("SocketException");

		} catch (IOException e) {

			e.printStackTrace();

		}

	}

und hier dort wo es vom Server empfangen werden soll

	public void run() {

		try {

			BufferedReader input = new BufferedReader(new InputStreamReader(

					this.socket.getInputStream()));

			PrintWriter output = new PrintWriter(this.socket.getOutputStream(),

					true);


			System.out.println("Verbindung zu Client aufgebaut");


			while (true) {

				String sStroeme = null;


				if ((sStroeme = input.readLine()) != null) {

					System.out.println(sStroeme);

					output.print(sStroeme);

				}

				// System.out.write(b, 0, iStroeme);

			}

		} catch (SocketException e) {

			System.out.println("Verbindung verloren");

		} catch (IOException e) {

			e.printStackTrace();

		}

	}

Weiss jemand weiter? Einmal wird es geschickt und beim zweiten mal wie gesagt ... SocketExcpetion.

Vielen Dank.

Geschrieben

hi....

beim clienten machst du immer das close(); wenn du aber eh immer wieder etwas schickst wäre es doch klüger wenn du es nur machst wenn du das prog beendest bzw. nichts mehr schicken willst.

die socket exception kommt auf der client seite??

ich hatte meine chat programme immer mit 2 verscheiedenen sockets gemacht...

mach mal nen close() in der while schleife vom server...nur für den output.

Geschrieben

ich habs grad mal angetestet. Hab vorhin vergessen zu sagen, dass wenn ich das output.close() raus nehme, dass es dann garnichts mehr schickt. mit close aber auch nur einmal. Wenn ich im Client das close raus nehme und beim Server in die while-Schleife rein hau tut sich auch garnichts.

Ich hab im Client global den socket initialisiert. Dadurch hab ich mir dann auch gedacht dass dieses close() nicht gut ist, da man evtl. kein neues Object mehr mit diesen socket erstellen kann nachdem das erste geclosed wurde. Ich weiss nicht genau und ich weiss auch nicht wie ich das anders regeln könnte. Ich hab schon probier einen neuen Sockel zu erstellen in der Methode vom client und dem einfach den wert vom globalen sockel zugewiesen, aber so gehts auch nichl. Weiss jemand noch weiter?

Geschrieben

anstatt close() versuch es mal mit flush()...das bewirkt das die daten auch wirklich geschrieben werden....also direkt nachdem write() flush() aufrufen und am ende close().

weil wenn du close() aufrufst bewirkt es auch das die restlichen daten geschrieben werden...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...