Socket, Daten über BufferedWriter senden

Status
Nicht offen für weitere Antworten.

danamer

Mitglied
Hallo zusammen
ich habe einen Java-server und einen Flash-clients (1 Personen-Chat).

Ich sende nun vom Client einen Text, der Server sendetet den Text an den Client zurück.
wenn ich nun beim server die daten über den normalen OutputStream an den Flash-client übergebe, funktioniert alles Prima. wenn ich aber beim Java-Server den BufferedWriter mit der write()-funktion verwende und einen String sende (nicht wie beim OutputStream wo es nur bytes sind) , empfängt der client keine Daten mehr.

Was mache ich falsch??
Hoffe es kann mir jemand helfen, danke
gruss Danamer

Hauptserver:

Code:
import java.io.*;
import java.net.*;

public class StartServer {

	static Thread_connection[] clients;

	static final int MAXSOCKET = 10;

	ServerSocket server;

	public StartServer() {

		try {
			server = new ServerSocket(1234);
		} catch (IOException e1) {
			e1.printStackTrace();
		}

		clients = new Thread_connection[MAXSOCKET];
		int i = 0;

		while (true) {

			Socket socket = null;

			try {

				System.out.println("warten auf einen weiteren Client");

				socket = server.accept();

				// Thread starten
				clients[i] = new Thread_connection(socket, this);
				new Thread(clients[i]).start();
				i++;

			} catch (IOException e) {

				e.printStackTrace();

			} finally {

				if (socket != null) {

				}

			}

		}
	}

	public void broadCast(String msg) {
		
		for (int i = 0; i < clients.length; i++) {

			clients[i].send(msg);
		}
	}

}

Thread:
Code:
import java.io.*;
import java.net.*;

public class Thread_connection implements Runnable {

	private Socket client_socket = null;
	private BufferedReader reader;
	private BufferedWriter writer;
	private StartServer server;

	public Thread_connection(Socket socket, StartServer server) {
		
		System.out.println("Neuer Thread gestarted");
		client_socket = socket;
		this.server = server;
		
		try {
			reader =  new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
			writer = new BufferedWriter(new OutputStreamWriter(client_socket.getOutputStream()));
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

	public void run() {

		
		try {
			System.out.println("Verbindung wurde hergestellt mit "+ client_socket.getInetAddress());
		
			int temp = 1;
			do{
				
				temp = reader.read();
				
				if(temp > -1){
				
				server.broadCast(String.valueOf(temp));
									
				}
			}while(temp>-1);

			
		} catch (Exception e) {
			e.getStackTrace();
		} finally {
			try {
				if (client_socket != null) {
				
					client_socket.close();
					System.out.println("Verbindung wurde getrennt");

				}
			} catch (Exception e) {
				e.getStackTrace();
			}

		}

	}
	
	public void send(String msg){
	
		try {
			System.out.println("Daten gesendet");
			writer.write(msg);
			writer.flush();
			
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	
	}
	
}
 

HoaX

Top Contributor
schaut ok aus, sicher dass beim client nix ankommt?

ich tippe mal dein client wartet auf einen zeilenumbruch oder so den write nicht erzeugt.
 
G

Gast

Gast
HoaX hat gesagt.:
ich tippe mal dein client wartet auf einen zeilenumbruch oder so den write nicht erzeugt.
Guten Tag,

Ich habe das gleiche Problem. Wie kann ich denn verhindern, dass er nicht auf einen Zeilenumbruch wartet? Bin mir jetzt ziemlich sicher, dass es an dem liegt.... aber wie umgeht man das?

gruss
 

danamer

Mitglied
Flashclient:
Code:
stop();
var socket:XMLSocket = new XMLSocket();

verbindung = function () {
	trace("verbindung wird aufgebaut...");
	socket.connect("localhost", 1234);
	
	socket.onConnect = function(success) {
		if (success) {
			trace("verbindung aufgebaut");
			verbunden.text = "verbunden"
			clearInterval(interval);
		} else {
			trace("keine verbindung");
		}
	};
};
socket.onData = function(data) {
	trace("empfangen");
	txt_in.text = data + txt_in.text;

	//interval = setInterval(verbindung, 2000);
};
button.onRelease = function() {
	trace("gesendet");
	socket.send(txt_out.text);
	txt_out.text = "";
};
interval = setInterval(verbindung, 2000);

--> auf der bühne ist ein dynamisches textfeld "txt_in". Hier wird der empfangene Text angezeigt. dann ist ein eingabetextfeld "txt_out" hier wird der zu sendende text eingegeben und der button "button" zum senden des strings.

hoffe ihr findet einen fehler...
gruss danamer
 

danamer

Mitglied
hey,
kann mir keiner helfen?? wie kann ich machen dass der Client nicht auf einen Zeilenumbruch wartet? oder anders gesagt, da wir ja in einem Java-Forum sind, wie kann ich beim BufferedOutputStream am Schluss noch so einen Zeilenubruch schicken?? damit der Client die Daten trozdem ausgibt??
 
T

tuxedo

Gast
Ohne den Quelltext jetzt durchforstet zu haben:
Schick dich einfach ein "\n" mit ...

- Alex
 

danamer

Mitglied
ich habe das mit dem senden eines Leerzeichens versucht, hat jedoch nicht funktioniert "\n" ist ja 10, habe also habe ich am schluss der übertragung noch
Code:
writer.write(10);
hinzugefügt.

wenn ich den ausgabestrom mit system.out ausgebe sendet der bufferedstream immer eine '0' am schluss. wie kann ich das umgehen? hat es etwas mit dem zu tun??

gruss danamer
 
T

tuxedo

Gast
Wieso gehst du den umweg über "10"? Wieso sendest du nicht einfach den String "\n". Wenn du eh die ganze Zeit mit String-Übertragung arbeitest, Das muss auf jeden Fall funktionieren.

BTW: Dein Problem ist doch nicht der BufferedWriter, sondern die Art und weise wie die liest. Der BufferedWriter sendet "alles" was du ihm gibst. Der wartet nicht auf den Zeilenumbruch.
 

Murray

Top Contributor
Mit einem "normalen" OutputStream hat es funktioniert? Wie hast du die Daten da geschrieben? Einfach nur
Code:
out.write( msg.getBytes());
Oder hast du da noch irgendwelche Zeilenumbrüche explizit hinzugefügt?
 

danamer

Mitglied
mit dem Inputstream bin ich so umgegangen, mit diesem server funktioniert alles prima (beispiel von http://www.jensschwarz.net/flash/tutorials/flashsockets/java_server.htm)

Code:
import java.net.*;
import java.io.*;

public class Server {
 public static void main (String args[]) throws IOException {

  ServerSocket mySocketServer = new ServerSocket(1234);
  Socket mySocket = mySocketServer.accept();
  mySocketServer.close();   

  InputStream in = mySocket.getInputStream();
  OutputStream out = mySocket.getOutputStream();
    
  byte buffer[] = new byte[1];
  int i;

  do
  {
    i = in.read(buffer, 0, 1);
    if (i>-1) out.write(buffer, 0, 1);
  } while(i>-1);

  in.close();
  out.close();
  mySocket.close();
 }
}

und betr. "\n", das funktioniert auch nicht, ich hab in der send() methode von der thread_connection klasse folgendes zum Test geändert:

Code:
  public void send(String msg){ 
    
      try { 
         System.out.println(msg); 
         writer.write("nanana");      
         writer.flush();                      
         writer.write("\n");
         writer.flush(); 
//       writer.write(msg);
         
         
      } catch (IOException e) { 
          
         e.printStackTrace(); 
      } 
    
   }

gruss danamer
 
T

tuxedo

Gast
vielleicht ist dein lesepuffer auf der empfänger seite zu klein? Beim senden kannst du ja das abschicken mit "flush()" erzwingen. Aber das lesen kann man IMHO nicht erzwingen.

Die Sockets kennen (sowohl Server als auch Clientsocket) ".setReceiveBufferSize()".... Da einfach mal zurück gehen. Kannst ja mal mit dem Wert 1 testen. Wobei für den späteren Programmverlauf 1 nicht die beste Wahl ist.

- Alex
 
G

Gast

Gast
Weil den empfänger schon nach den ersten aufruf ewig wartet bis das \n ankommt. Du musst einen write aufruf komplett mit \n abschliesen.

write("blabla\n")
 

danamer

Mitglied
auch mit

Code:
writer.write("nanana\n")

funktioniert es nicht. hab es auchnoch mit

Code:
client_socket.setReceiveBufferSize(1);

vor dem "writer.write()" probiert. geht jedoch auch nicht.

in der Flash hifle habe ich mal die onData funktion näher angeschaut, da steht:

"Wird nach dem Herunterladen einer durch ein Null-Byte (0) abgeschlossenen Nachricht vom Server aufgerufen. ".

somit wartet der client wohl nicht auf einen Zeilenumbruch... und das komische daran ist, wenn ich ja den ausgabestrom vom server ausgebe, wird am schluss eine null gesendet, also bekommt ja der client die daten und das Null-Byte erhält er ja auch oder sehe ich das falsch?? :-(

gruss Danamer
 

J.C.

Mitglied
Einer Schreibt:

Code:
BufferedWriter BW = new BufferedWriter(new OutputStreamWriter(DerSocket.getOutputStream()) );

BW.write(String+"\n");

BW.flush();


Der andere muss zur gleichen Zeit warten:

Code:
BufferedReader BR = new BufferedReader(newInputStreamReader(DerSocket.getInputStream()));

String Message = BR.readLine();

BR.flush;


funktioniert 100%...


Du musst darauf achten, dass wenn der eine sendet, der andere liest, oder du setzt jeweils lesen und schreiben auf beiden seiten in threads und fragst nach einer Nachricht in einer endlosschleife ab.
 

Murray

Top Contributor
Versuch doch mal
Code:
writer.write( "nanana");
writer.write( 0);

Trotzdem wäre es m.E. besser, keinen java.io.Writer zu verwenden, wenn auf der anderen Seite kein java.io.Reader lauscht.
 
T

tuxedo

Gast
Du kannst noch so oft den Ausgabepuffer flushen, einen Zeilenumbruch mitsenden oder den Puffer klein genug machen: Wenn der Eingabepuffer auf der Empfängerseite zu groß ist, kriegst du da Probleme beim auslesen...Also auch diesen berücksichtigen!

- Alex
 

danamer

Mitglied
Klasse :-D

wenn ich es so schreibe

Code:
 writer.write(msg);
    	  writer.write(0);
    	  writer.flush();

funktioniert alles prima. jetz ist nurnoch das einzige problem, dass es die zeichen verkehrt schickt (big / little endian).

kann mir noch jemand schnell sagen wie ich dies am einfachsten ändern kann?? danke

gruss danamer
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
S Thread, Daten vom Socket lesen Netzwerkprogrammierung 2
M Socket schließt bevor Daten komplett geladen Netzwerkprogrammierung 5
W Socket Server -> lesen von / schreiben zu php-script Netzwerkprogrammierung 6
B Versuch mit Socket etwas zu lesen und zu schreiben Netzwerkprogrammierung 15
G Socket Socket Kommunikation Netzwerkprogrammierung 1
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
H Socket Kann ein Socket server 2 dimensionale Arrays empfangen und versenden? Netzwerkprogrammierung 3
D Socket-Verbindungen übers Internet Netzwerkprogrammierung 4
N Java socket Programmierung Filme verschicken Netzwerkprogrammierung 20
A TCP multiClientServer mit socket mittels ObjectOutputStream Netzwerkprogrammierung 12
A Socket-Anwendung (BufferedWriter/Reader liest nicht aktuellen Wert) Netzwerkprogrammierung 6
platofan23 Socket Java Socket mit DynDns nicht erreichbar Netzwerkprogrammierung 6
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
M Socket Socket lehnt Verbindung ab Netzwerkprogrammierung 3
x46 Connection reset by peer: socket write error Netzwerkprogrammierung 6
x46 Socket Files per Socket verschicken Netzwerkprogrammierung 1
platofan23 Probleme mit Socket bei Android Studio? Netzwerkprogrammierung 22
platofan23 Socket Hilfe mit Socket Thread und ArrayList Netzwerkprogrammierung 6
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
D new ObjectInputStream(socket.getInputStream()); Netzwerkprogrammierung 15
E Socket Frage Netzwerkprogrammierung 6
D ServerSocket - Socket Verbindungsart Netzwerkprogrammierung 3
T Frage bzgl. Socket-API Netzwerkprogrammierung 1
F TCP Socket auf Verbindungsabbruch prüfen Netzwerkprogrammierung 15
F Socket Verbindung mit Verschlüsselung und Authentifierzung Netzwerkprogrammierung 1
I Socket ObjectOutputStream-Socket: Objekt wird falsch übertragen Netzwerkprogrammierung 2
T Socket Socket connections schließen? Netzwerkprogrammierung 2
D Socket Socket OutputStream leeren? Netzwerkprogrammierung 3
F Socket Socket in anderen Methoden Netzwerkprogrammierung 1
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
I Socket Netzwerkprogrammierung 1
F Wiederverbinden nach socket Abbruch Netzwerkprogrammierung 1
J 1 Socket - 2 Serversocket Netzwerkprogrammierung 4
T Socket sendet erst nach socket.close() Netzwerkprogrammierung 2
F Socket Verbindungsaufbau abbrechen Netzwerkprogrammierung 3
P Socket Socket-Verbindung Input sehr langsam Netzwerkprogrammierung 1
I Socket Kommunikation C / Java Netzwerkprogrammierung 2
Joew0815 socket event handler Netzwerkprogrammierung 2
F Einfache Socket Verbindung Netzwerkprogrammierung 2
A Socket Socket Receive-/SendBuffersize Netzwerkprogrammierung 0
D Socket server auf Smartphone Netzwerkprogrammierung 9
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
A Socket Socket Server netcat Netzwerkprogrammierung 1
Shams Anfängerfrage zu Server-Socket-Kommunikation Netzwerkprogrammierung 2
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
D Socket Error: java.lang.NullPointerException Netzwerkprogrammierung 1
D TCP Socket funktioniert nicht richtig Netzwerkprogrammierung 3
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
B SSL Socket Netzwerkprogrammierung 2
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
R Dauerhaft offene Socket-Verbindung? Netzwerkprogrammierung 3
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
P Warum kann ich kein Socket aufbauen? Netzwerkprogrammierung 12
S Socket SSL Socket und Sun/Oracle Java Netzwerkprogrammierung 5
S Socket Socket Verbindung wiederherstellen Netzwerkprogrammierung 16
precoc Server Socket Start / Stop Netzwerkprogrammierung 5
N SOCKET mehrere Requests, keep Alive serverspezifisch? Netzwerkprogrammierung 3
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
C Socket Systemsperren mit Socket Netzwerkprogrammierung 4
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
D Socket Multithread-Socket | Kurz vor dem Ziel Netzwerkprogrammierung 7
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Dynamische Socket-Thread Erzeugung Netzwerkprogrammierung 2
D Socket Socket absichtlich so schließen, dass Gegenseite java.net.SocketException: Connection reset wirft Netzwerkprogrammierung 4
J Socket Dateien über Socket auf Server speichern Netzwerkprogrammierung 3
S Socket-Frage zu einem LAN-Spiel. Netzwerkprogrammierung 3
A UDP verlorene Pakete/ socket.receive zu langsam Netzwerkprogrammierung 27
CookieSoft Socket Packet per Socket Netzwerkprogrammierung 8
CookieSoft Fehler bei Socket Netzwerkprogrammierung 4
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
T Per Socket auf POP3 zugreifen? Netzwerkprogrammierung 7
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
Z Socket Socket-Thread falsch? Netzwerkprogrammierung 5
Helgon Socket Socket IP Frage + Tutorial/Bücher Netzwerkprogrammierung 5
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
T Socket String zu Socket Netzwerkprogrammierung 26
M Datenübertragung per Socket nur alle 200ms Netzwerkprogrammierung 4
C Socket Socket: Connection timed out Netzwerkprogrammierung 3
T Socket blockierter Socket Netzwerkprogrammierung 4
C Socket Probleme beim Lesen und Schreiben aus/in einen Socket Netzwerkprogrammierung 2
T Alternative Socket mit Verbindungsabbruch Erkennung Netzwerkprogrammierung 2
M Socket, Ende Dateitransfer Netzwerkprogrammierung 4
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
D RMI oder Socket Netzwerkprogrammierung 4
H Socket Socket listening Netzwerkprogrammierung 11
D Client Socket mit Eventlistener? Netzwerkprogrammierung 5
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
A Socket Netzwerkprogrammierung 18
N Socket geht auf Windows, aber auf Mac nicht ? Netzwerkprogrammierung 3
ruffio1978 Telnet über ein socket ansprechen Netzwerkprogrammierung 8
G Exception: Connection reset by peer: socket write error Netzwerkprogrammierung 2
M SSl Socket Server und openssl key Netzwerkprogrammierung 3
J Socket Socket Programmierung. Wie anfangen? Netzwerkprogrammierung 4
DEvent Keine IOException beim schreiben Socket Netzwerkprogrammierung 3
A Socket Server: Message an verschiedene Clients senden Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben