2009-11-22 5 views
6

Qualcuno può aiutarmi a eseguire il debug di questo programma?Problema nel programma TCP (Java)

Quello che segue è codice del server:

package networking; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Scanner; 

class TcpServer { 
    public static void main(String[] args) throws IOException { 
     ServerSocket serverSocket = new ServerSocket(5555); 
     while (true) { 
      Socket client = serverSocket.accept(); 
      Scanner reader = new Scanner(client.getInputStream()); 
      PrintWriter writer = new PrintWriter(client.getOutputStream()); 
      String inputString = reader.nextLine(); 
      System.out.println("Received from client : " + inputString); 
      writer.write(inputString.toUpperCase()); 
      client.close(); 
     } 
    } 
} 

e questo è il codice del client:

package networking; 

import java.io.PrintWriter; 
import java.io.IOException; 
import java.net.Socket; 
import java.util.Scanner; 

class TcpClient { 
    public static void main(String[] args) throws IOException { 
     Socket client = new Socket("localhost", 5555); 
     PrintWriter writer = new PrintWriter(client.getOutputStream()); 
     Scanner reader=new Scanner(client.getInputStream()); 
     writer.println("oPen SOurCe RUleS !"); 
     System.out.println("Received from server : "+reader.nextLine()); 
     client.close(); 
    } 
} 

Il problema è che quando ho eseguito questo programma sia client & server di entrare in stato di attesa indefinito. Qualcuno potrebbe dirmi cosa c'è di sbagliato in questo codice?

Grazie in anticipo!

+1

È il codice corretto? . . . Le importazioni di TcpClient seam da incasinare: non importate 'PrintWriter' e non usate' DataOutputStream'. . . . Ad ogni modo suggerisco di non usare PrintWriter poiché NON getta Eccezioni, devi controllare Errori chiamando 'checkError'. IMHO va bene solo per il logging. –

+0

@Carlos: Grazie per avermelo fatto notare! L'ho corretto ora! :) – missingfaktor

+0

@Carlos: cosa avrei dovuto usare al posto di PrintWriter? – missingfaktor

risposta

7

Hai provato Flushing il PrintWriter?

Si chiude lo stream ma non si avvisa mai lo scrittore che si sta per farlo.

+0

Grazie! Problema risolto! – missingfaktor