Socket - Server verbindung

  • Themenstarter Themenstarter Foufou
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
F

Foufou

Gast
Hallo

Ich bestimmt ein anfanger Problem 😳
Ich schicke die Informationen an Server das Problem ich kann die angekommene Informationen nicht weiter bearbeiten

Die erste System.out.println bekomme ich auf jeden Fall "System.out.println("Null objekt empfangen" + in);"
aber wenn ich read mache und es augeben möcht dann passiert nichts "System.out.println("sinvolles empfangen" + in.readObject());" :cry:
kann jemanden mir ein Tipp geben.

Danke :wink:

Mein Code sieht wie folgt aus:
Code:
import java.io.*; 
import java.net.*;
import java.io.Serializable.*; 

public class EchoServer implements Serializable{ 

  public static void main(String[] argv) 
  { 
    DBManager datenbank = new DBManager();

    try 
    { 
	     ServerSocket serverSocket = new ServerSocket(1234); 
	     Socket clientSocket = serverSocket.accept(); 
	     ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream()); 
	     ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream()); 
	 
	     System.out.println("Null objekt empfangen" + in);
	     
	     in.readObject();
	     
	     System.out.println("sinvolles empfangen" + in.readObject());
	     
		 Anfrage anfrage, antwort;
		 String s = ((Anfrage)in.readObject()).gettitel();
		 System.out.println("s");
		 anfrage = (Anfrage)in.readObject();
		 System.out.println("_3");
		 
		 Thread.sleep(5000);
		 
	      if((anfrage = (Anfrage)in.readObject()) == null)
	      {
	    	  System.out.println("_3");
		      datenbank.getDaten(anfrage);
		      System.out.println("_3");
		      out.writeObject(anfrage); 
	      }
	
	      out.close(); 
	      in.close(); 
	      clientSocket.close(); 
	      serverSocket.close(); 
    } 
    catch (UnknownHostException uhe) 
    { 
      System.out.println(uhe); 
    } 
    catch (Exception ioe) 
    { 
      System.out.println(ioe); 
    }
    
  } // main
}
 
1. Ich geh mal davon aus, dass du gleichzeitig einen sinnvollen - dazu passenden - Client laufen lässt 😉

2. In "System.out.println("sinvolles empfangen" + in.readObject());" liest du nochmal ein Object. Ist das Absicht?
Bzw. scheinst das vielleicht ein genereller Fehler bei dir zu sein. in.readObject liest jedesmal ein neues Objekt! Du solltest dir das das erste Mal in einer Variable speichern, und dann das verwenden.
 
ja es ist richtig habe es jetzt geändert aber habe immer
noch das Problem das ich den Objekt weiter verwenden kann, wenn ich zb. den Titel abfrage gibt mir null zurück
 
Poste bitte mal deinen aktualisierten Code und den passenden Client dazu, das schaut für mich nämlich alles ein wenig arg zerstört aus 😉.
 
Hi
Ja ich finde den Fehler nicht 🙂
Hier ist mein Server Code

Server :

public class EchoServer implements Serializable{

public static void main(String[] argv)
{
DBManager datenbank = new DBManager();
Anfrage anfrage = null;
try
{
ServerSocket serverSocket = new ServerSocket(1234);
Socket clientSocket = serverSocket.accept();
ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream());
ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());


Anfrage antwort = null;
anfrage = (Anfrage)in.readObject();

Thread.sleep(5000);

if(anfrage != null)
{
System.out.println("_3");
datenbank.getDaten(anfrage);
Thread.sleep(5000);

out.writeObject(antwort);
}

out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
catch (UnknownHostException uhe)
{
System.out.println(uhe);
}
catch (Exception ioe)
{
System.out.println(ioe);
}

} // main
}

und hier ist mein Client:
public class EchoClient implements Serializable {


//Object[][] daten;
Anfrage request = null;
Anfrage reponse = null;
public void getResponse(Anfrage anfrage) {

try {
String host = "homi.";
Socket meinEchoSocket = new Socket(host,1234);
this.request = anfrage;
System.out.println( "Client : Hier bei Film-Suchen " +request.gettitel());

//Senden & empfangen
ObjectOutputStream out = new ObjectOutputStream( meinEchoSocket.getOutputStream());
ObjectInputStream in = new ObjectInputStream( meinEchoSocket.getInputStream());

// objekt senden
out.writeObject(request);

// warten auf response
while(reponse == null)
{
this.reponse = (Anfrage)in.readObject();
System.out.println("Hier beim Client" + reponse.gettitel());
System.out.println("Hier beim Client");
}

System.out.println("Host = "+host);
System.out.println("Echo = "+request.gettitel());

out.close();
in.close();
meinEchoSocket.close();
}
catch (UnknownHostException uhe) {
System.out.println(uhe);
}
catch (Exception ioe) {
System.out.println(ioe);
}

}

Der objekt was ich bekomme im Server ist Null ich kann es nicht weiter verarbeiten und die zugehöriger Informationen aus der Datenbank abfragen : (
 
Sorry das ich mein Code nicht gepostet habe ich weiss leider nicht wie es geht :/
 
Sicher das request im Client nicht schon vor dem Senden null ist?

btw: schreibe nach deinem Code ein [/code] und vor deinem Code ein
Code:
 
ja sicher weil wenn ich in meinem client die variabel abfrage
[/code] System.out.println( "Client : Hier bei Film-Suchen " +request.gettitel());
Code:
gibt er mir den Namen zurück
 
Mal so nebenbei, wo gibt er dir null zurück? Beim Server oder beim Client (und dann bitte auch wo genau)? Mir kommt es nämlich langsam so vor als würde das Object nie beim Server ankommen.
 
Er gibt mir dann die Null beim Server

anfrage = (Anfrage)in.readObject();
wenn ich versuche jetzt den Titel auszugeben hier beim Server
anfrage.gettitel() dann bekomme ich ein Null
aber komische weise geht er in die if rein
if(anfrage != null)
und er leitet den Objekt weiter an der Datenbank Klasse
dort wenn ich noch einmal die variabel abfrage gibt mir Null zurück?
 
Also, er hat auf jedenfall ein Objekt der Klasse Anfrage empfangen, weil

1. Wenn du irgendwo ein objectinputstream.readObject() hast, dann macht er solange im Code nicht weiter, bis auch ein Objekt ankommt.
2. Wenn es kein Objekt der Klasse Anfrage wäre, würde er eine ClassCastException werfen

. Könnte es also sein, dass der Fehler evtl. in der Klasse DBManager oder Anfrage liegt?
 
Hi
Ich wollte dir danken, es funktioniert jetzt
Ich habe den Fehler die ganze Zeit beimServer und Client gesucht und der Fehler lag bei der Klasse Anfrage 🙂
Danke noch einmal
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben