Daten von einem (char*)Socket einlesen.

Status
Nicht offen für weitere Antworten.

javamondmann

Mitglied
Hallole, ich hoffe ich bin hier richtig.


Ich habe ein Programm, welches von einem Socket Daten einliest und diese verarbeitet.
Das mache ich bisher mit read().

Da der Server von dem ich die Daten bekomme IMMER auf Windows läuft und ih C/C++ Programmiert ist, bekomme ich vom Socket einen Steam der eben ein C-Mäßiges char Array ist mit max. 1024 Zeichen (char output[1024] ).

ICh lese ihn zb so ein:
Code:
char []cread= new char[1024];		
			
			ma_reader.read(cread,0,1023);
			b_time=new String(cread);

in b_time steht dann nachher zb: ZEIT: 09:41 03.11.2006\0\0\0\0
So.
Da der Stream immer 1024 Zeichen lang ist, werden die restlichen Zeichen mit bis 1024 '\0' aufgefüllt wie es in C üblich ist.
Die Stringlänge ist hier laut C also 22.
Und laut Java 1024.

Ist ja auch klar, denn Java versteht die nullen nicht als Stream Ende.

Jetzt muss ich jedesmal nach der ersten null suchen und den String abschneiden usw.

Geht das auch einfacher?
Kann man da irgendwas mit nem Bytearray erreichen, damit er bei der ersten null den String abschneidet?

Ist schon irgendwie umständlich, da ich recht viel kommunikation habe.

Vielleicht hat der eine oder andere ja nen Tip für mich🙂

Vielen Dank schonmal, Javamondmann
 
Da der Server von dem ich die Daten bekomme IMMER auf Windows läuft und ih C/C++ Programmiert ist, bekomme ich vom Socket einen Steam der eben ein C-Mäßiges char Array ist mit max. 1024 Zeichen (char output[1024] ).
Nur weil Strings in C als char* implementiert sind heißt das nicht, daß du in Java auch einen char* zum einlsen verwenden mußt.
Du kannst ganz normal deinen BufferedReader oder was du sonst so verwendest einsetzen.
 
Mach ich doch, aber so kommt nichts zurück:

Code:
us.socket.setSoTimeout(1500);//1,5sec
			BufferedReader ma_reader = new BufferedReader( new InputStreamReader( us.socket.getInputStream()) );
					
			s=ma_reader.readLine();

....Timeout und nichts kommt an.....

MIt read() gehts. Aber wenn ich mir read angucke, dann braucht ich einen Char array....

Also wie mache ich das am BEsten?
 
readLine liest bis zum Zeilenendezeichen ein, das bei dir anscheinend nicht vorhanden ist.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben