Buchstaben übergeben

Status
Nicht offen für weitere Antworten.

Paddel

Bekanntes Mitglied
Code:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;


public class Client {
	public static void main(String[] args) {
		Socket server = null;
		try {
			server = new Socket("*******",1234);
			InputStream in = server.getInputStream();
			OutputStream out = server.getOutputStream();
			
			out.write(5);
			out.write(5);
			System.out.println(in.read());
		} catch (Exception e) {
			// TODO: handle exception
		}finally{
		      if ( server != null ) 
		    	  
		    	  
		          try { server.close(); } catch ( IOException e ) { } 
		}
		
	}
		
}
würd ma gerne wissen wie ich über die Streams auch Strings oder zumindest chars verschicken kann. Gruss
 

Murray

Top Contributor
Code:
out.write( meinString.getBytes());
Oder besser, weil man die Kontrolle über die umsetzung von Unicode nach ASCII behält:
Code:
out.write( meinString.getBytes( "UTF-8"));
 
T

tuxedo

Gast
Das Stichwort heisst "DataOutputStream". Damit kannst du nahezu alles durch einen Stream schicken: primitive Datentypen, Strings und Objekte.

Alternativ steht es dir natürlich frei die Strings in bytes (gleiches gilt für alles andere) zu zerlegen und diese zu schicken.

- Alex
 

Paddel

Bekanntes Mitglied
irgendwie geht e simmer noch nicht. Der Sendende:
Code:
BufferedWriter out = new BufferedWriter( new OutputStreamWriter(client.getOutputStream()));
			out.write("lala");

Empfänger:
Code:
			server = new Socket("********",1237);
			BufferedReader in = new BufferedReader( new InputStreamReader(server.getInputStream()) );

Connection funktioniert aber die Buchstaben auszugeben klappt ein..Meldung:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Client$1.actionPerformed(Client.java:54)
 

Paddel

Bekanntes Mitglied
irgendwie geht e simmer noch nicht. Der Sendende:
Code:
BufferedWriter out = new BufferedWriter( new OutputStreamWriter(client.getOutputStream()));
			out.write("lala");

Empfänger:
Code:
			server = new Socket("********",1237);
			BufferedReader in = new BufferedReader( new InputStreamReader(server.getInputStream()) );

Connection funktioniert aber die Buchstaben auszugeben klappt ein..Meldung:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Client$1.actionPerformed(Client.java:54)
 
S

SlaterB

Gast
eine NullPointerException hat meist Hand und Fuss, ist keine Magie im Hintergrund,

finde heraus, was Zeile 54 in Client.java ist, und auf welches null-Objekt dort zugegriffen wird,

falls es so eine verschachtelte Zeile wie
> BufferedReader in = new BufferedReader( new InputStreamReader(server.getInputStream()) );
ist, dann splitte die entweder in mehrere Zeilen, oder prüfe mit if,

z.B.

if (server == null) {
System.out.println("daher kommt also gleich die Exception, server ist null");
}

falls server oder server.getInputStream() null sein sollte,
habe ich zumindest allerdings keine Erklärung ;)
 

Paddel

Bekanntes Mitglied
hab schon alles probiert. Die Zeile 54 is die Zeile mit in.readLine() wo er versucht die Zeile zu lesen. Kennst du nicht evtl ein Beipsiel wo das richtig gemacht ist. Ich sitz hier jetzt seit Stunden dran und hab echt kA wieso mir das einfach nicht gelingt bzw. was daran falsch ist. Mit einem Buffered Reader kann ich doch Strings versenden. Es klappt aber immer nur mit Zahlen.

Code:
      DataOutputStream	out = new DataOutputStream(server.getOutputStream());
      String str = "LALALA";
      out.writeUTF(str);

DataInputStream in = new DataInputStream(client.getInputStream()) ;


Code:
      System.out.println("Jetzt solte es kommen");
    	String to = in.readUTF();

So hab nochmal alles neu geschrieben... oben die wichtigsten Zeilen. Er bleibt bei "Jetzt solte es kommen" hängen. Vorher übergebe ich eine int und das geht. DAs komplette Prog nocheinmal hier:

Code:
import java.io.*; 
import java.net.*; 
 
public class Server 
{ 
  private static void handleConnection( Socket client ) throws IOException 
  { 
	  DataInputStream in = new DataInputStream(client.getInputStream()) ;
    OutputStream out = client.getOutputStream(); 
 
    int factor1 = in.read(); 
    System.out.println("Factor 1:" + factor1);

    System.out.println("Jetzt solte es kommen");
    	String to = in.readUTF();
    	System.out.println("vorbei");
    	System.out.println(to);
    out.write( 5 * 6 ); 
  } 
 
  public static void main( String[] args ) throws IOException 
  { 
    ServerSocket server = new ServerSocket( 3141 ); 
 
    while ( true ) 
    { 
      Socket client = null; 
 
      try 
      { 
        client = server.accept(); 
        handleConnection ( client ); 
      } 
      catch ( IOException e ) { 
        e.printStackTrace(); 
      } 
      finally { 
        if ( client != null ) 
          try { client.close(); } catch ( IOException e ) { } 
      } 
    } 
  } 
}
Code:
import java.net.*; 
import java.io.*; 
 
class Client 
{ 
  public static void main( String[] args ) 
  { 
    Socket server = null; 
 
    try 
    { 
      server = new Socket( "localhost", 3141 ); 
      InputStream  in  = server.getInputStream(); 
      DataOutputStream	out = new DataOutputStream(server.getOutputStream());
      String str = "LALALA";
      out.writeUTF(str);
//      out.write( la ); 
      int result = in.read(); 
      System.out.println( result ); 
    } 
    catch ( UnknownHostException e ) { 
      e.printStackTrace(); 
    } 
    catch ( IOException e ) { 
      e.printStackTrace(); 
    } 
    finally 
    { 
      if ( server != null ) 
 
 
        try { server.close(); } catch ( IOException e ) { } 
    } 
  } 
}
 
S

SlaterB

Gast
in diesem Programm hier ist doch keine NullPointerException,
also ist das schon geklärt?

was writeUTF und readUTF so genau machen weiß ich nicht, habe ich noch nie irgendwo gesehen, ist das wirklich als Anfänger nötig?
dass dein Programm hängen bleibt liegt aber anscheinend daran, dass du in Zeile 13
> int factor1 = in.read();
das erste Byte von dem UTF-String wegliest, danach ist wohl alles irgendwie kaputt,

wenn du den Aufruf weglässt, funktioniert
> String to = in.readUTF();
wieder

--------

mit
in.read();

liest du übrigens immer nur ein byte, einen Wert bis maximal 128,
wenn du einen Java-int lesen willst (4 Bytes), dann brauchst du einen DateInputStream (readInt()),

vielleicht muss man auch writeInt() statt write() verwenden

ein Lehrbuch kann ich gerade nicht nennen, in
http://www.galileocomputing.de/openbook/javainsel7/
habe ich im Dateikapitel auf die Schnelle wenig zu DateInputStream gesehen, trotzdem natürlich nicht schlecht zu lesen,
sonst vielleicht auch bei google nach socket + DateInputStream suchen
 

Murray

Top Contributor
1. Wenn Du Data*putStreams verwendest, solltest Du nicht die "low-level-Methoden" read und write verwenden; besser auch ints mit den dafür vorgesehenen Methoden readInt / writeInt behandeln.
2. Wenn das Programm davon ausgeht, dass das, was auf einen Stream geschrieben wird, sofort auf der anderen Seite ankommt, dann solltest Du nach dem Schreiben flush() aufrufen; ansonsten kann (und wird) es passieren, dass das System darauf wartet, dass noch mehr Daten kommen , weil es sich ja noch nicht lohnt, wegen der paar Bytes bereits ein ganzes Paket auf die Reise zu schicken
3. Die empfangende Seite muss genau das lesen, was der Sender schreibt - und natürlich in der gleichen Reihenfolge. Bei Dir liest der Server einen int, dann einen String, und dann schreibt er einen int. Der Client schreibt einen String und liest dann einen int. Das passt nicht zusammen.
 
G

Gast

Gast
hi
ich bekomme die server und client klassen von da oben nicht ans laufen, muss ich eine dritte klasse erstellen, die erst den server erstellt (vielleicht als thread) und dann den client?

ich weiss nicht wie ich server und client "verbinde".
:(
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T server empfängt nur 1 Buchstaben vom String Netzwerkprogrammierung 1
E Bilder übergeben Netzwerkprogrammierung 16
E Socket Werte mit DataInput- und Output- Stream übergeben Netzwerkprogrammierung 1
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
B Daten an Javaprogramm per URI Aufruf übergeben Netzwerkprogrammierung 7
M Java Eingabe auf FTP Server übergeben Netzwerkprogrammierung 4
L HTTP Daten an Server übergeben Netzwerkprogrammierung 2
B Eigene Objekte per RMI übergeben Netzwerkprogrammierung 2
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
M String an PHP Script aus Java übergeben Netzwerkprogrammierung 12
L Sockets übergeben Netzwerkprogrammierung 4
O Methoden vom Server zu Client übergeben Netzwerkprogrammierung 2
H Objekt von JSP an Servlet übergeben Netzwerkprogrammierung 4
T rmi ssl zu große Objekte übergeben -> Exception Netzwerkprogrammierung 10
C Webservice, ArrayList übergeben Netzwerkprogrammierung 3
A Streams per RMI übergeben Netzwerkprogrammierung 6
D HTTP Request erstellen (Form Name übergeben!) Netzwerkprogrammierung 3
D wie kann ich rmic ein .jar file übergeben? Netzwerkprogrammierung 3
E In Webseite einloggen/ GET, POST an PHP-Script übergeben Netzwerkprogrammierung 2
A RMI wie kann ich objekte übergeben? Netzwerkprogrammierung 5
M IP Adressen auslesen und in Windows/Linux übergeben Netzwerkprogrammierung 5

Ähnliche Java Themen


Oben