[J2ME/J2SE] Sockets willen niet communiceren

Pagina: 1
Acties:

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 01-12 17:16
Ik wil een applicatie maken in J2ME die communiceert met een server, geschreven in J2SE. Deze moeten via een eenvoudige zocket verbinding communiceren. Nu wil de mobile client alleen niet lezen en ik kan het probleem niet vinden, hopelijk ziet hier iemand het probleem.

De server:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public static void main(String[] args) {
    
   System.out.println( "Starting SmartServer Test Environment" );

   try {
      ServerSocket srv = new ServerSocket( 12345 );
      Socket s = srv.accept();
            
      BufferedReader in = new BufferedReader( new InputStreamReader( s.getInputStream() ) );
      PrintWriter out = new PrintWriter( s.getOutputStream(), true);
            
      String line = in.readLine();
      System.out.println( line );
      out.println("K");

      in.close();
      out.close();
      s.close();
      srv.close();
            
   } catch ( Exception e ) {
      System.out.println( e.toString() );
   } // try - catch
        
} // main


En in de mobiele client heb ik dit staan:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
String url = "socket://" + this.host + ":" + this.port;
SocketConnection sc = (SocketConnection) Connector.open(url);
sc.setSocketOption(SocketConnection.DELAY, 0);
sc.setSocketOption(SocketConnection.KEEPALIVE, 0);
InputStreamReader in = new InputStreamReader( sc.openInputStream() );
OutputStreamWriter out = new OutputStreamWriter( sc.openOutputStream() );

out.write("TEST");

int c = 0;
c = in.read(); 
System.out.println( (char)c );

in.close();
out.close();
sc.close();


Het probleem: De mobiele client blijft hangen en dus leest hij de socket niet uit, volgens mij. Toen ik de server alleen iets liet sturen en dit liet uitlezen werkte het wel en kreeg ik het karakter terug, toen ik de server alleen liet lezen en de client een string liet sturen werkte het prima. Maar als ik eerst een string naar de server stuur en dan de server antwoord laat sturen werkt het niet.

Ziet iemand wat ik hier fout doe? Dit zijn beide voorbeelden van de java.sun pagina's en ik kom er met Google niet uit.

Read the code, write the code, be the code!


  • CodeIT
  • Registratie: Juni 2002
  • Laatst online: 17:12

CodeIT

Code IT

Ik ben niet zo'n Java held, maar er valt me toch iets op:
Je stuurt "TEST" naar de server, en deze laat je met:
String line = in.readLine();
de regel uitlezen.
Je stuurt alleen geen carriage return mee, dus er wordt nooit een line gelezen. Als je "TEST\r\n" of out.writeline("TEST") stuurt werkt het misschien wel.

[ Voor 3% gewijzigd door CodeIT op 10-11-2006 12:53 ]


  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 01-12 17:16
Ik denk inderdaad dat je een punt hebt. Ik heb het inmiddels met in.read() wel voor elkaar. Over de methode die jij aandraagt had ik nog niet nagedacht, maar die ga ik zeker eens proberen en anders heb ik nu ook een werkend iets. Update volgt ...

CodeIT, je bent een held!
Ik heb een "\n" achter de message, in mijn test geval "TEST" geplakt en nu wil hij wel werken. Blijkbaar zo gewend aan J2SE en zijn functie println() dat je zoiets helemaal over het hoofd ziet.

[ Voor 31% gewijzigd door wackmaniac op 10-11-2006 13:01 ]

Read the code, write the code, be the code!


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Als je het helemaal cross-environment wil houden, voeg dan System.getProperty("line.separator") toe ipv een \n ;)

  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-06 13:00
BalusC schreef op vrijdag 10 november 2006 @ 13:13:
Als je het helemaal cross-environment wil houden, voeg dan System.getProperty("line.separator") toe ipv een \n ;)
Of je doet een out.writeln :)

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 08:22
rrrandy schreef op vrijdag 10 november 2006 @ 13:15:
[...]


Of je doet een out.writeln :)
MIDP 2.0 beschikt alleen over java.io.Writer en die biedt geen println() methode.
Dat was nu juist het probleem van de TS.

  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-06 13:00
FallenAngel666 schreef op vrijdag 10 november 2006 @ 13:44:
[...]


MIDP 2.0 beschikt alleen over java.io.Writer en die biedt geen println() methode.
Dat was nu juist het probleem van de TS.
Aha, daar heb ik dan ook geen ervaring mee.

  • den 150
  • Registratie: Oktober 2002
  • Niet online
BalusC schreef op vrijdag 10 november 2006 @ 13:13:
Als je het helemaal cross-environment wil houden, voeg dan System.getProperty("line.separator") toe ipv een \n ;)
Daarmee maak je het juist minder cross-environment, net omdat de mobile device een andere line separator kan hebben dan de server. Kies er gewoon een, '\n' bijvoorbeeld, en hou je daaraan.

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 16:33

alienfruit

the alien you never expected

Mag ik vragen hoe je dit alles compileert? Ik probeer al een tijd een server voor mijn j2me projects temaken alleen ik krijg het niet voor elkaar.

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 01-12 17:16
Heel eenvoudig een java server maken, zoals in diverse client / server tutorials staat.

Als je interesse hebt, moet je ff een pm sturen, dan kan ik je wel wat broncode sturen om op weg te helpen.

[ Voor 23% gewijzigd door wackmaniac op 11-11-2006 14:07 ]

Read the code, write the code, be the code!

Pagina: 1