2016-04-13 20 views
-1

Bir echo istemci sunucusu yazmaya çalışıyorum ama sunucudan yanıt alamıyorum. Hatalarımın nerede olduğunu bilmiyorum. İnternette bazı örnekler gördüm. Bazıları sadece InputStream/OutputStream kullanıyor, ancak BufferedReader ve PrintWriter kullanmaya karar verdim - bu büyük farklılıklar yaratıyor mu?Echo Server eko istemiyor

Sunucu tarafı:

public class Server { 

public static void main(String[] args){ 
    Server server = new Server(); 
    server.runServer(Integer.parseInt(args[0])); 
} 

private void runServer(final int port){ 
    ServerSocket serversckt = null; 
    Socket socket = null; 
    BufferedReader in = null; 
    PrintWriter out = null; 

    try{ 
     serversckt = new ServerSocket(port); 
     socket = serversckt.accept(); 
     System.out.println("Request from client accepted!"); 


     in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     out = new PrintWriter(socket.getOutputStream(), true); 

     String str; 
     while((str = in.readLine()) != null){ 
      System.out.println(str); 
      out.println(str); 
      out.flush(); 
     } 
    } 
    catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 

} 
} 

İstemci tarafı:

public class Client{ 

public static void main(String[] args){ 
    Client client = new Client(); 
    client.runClient(Integer.parseInt(args[0]), args[1]); 
} 

private void runClient(final int port, final String hostname){ 
    Socket sckt = null; 
    try{ 
     sckt = new Socket(hostname, port); 
     BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 
     BufferedReader in = new BufferedReader(new InputStreamReader(sckt.getInputStream())); 
     PrintWriter out = new PrintWriter(sckt.getOutputStream(), true); 

     String str; 
     while((str = stdIn.readLine()) != null){ 
      out.println(str); 
      System.out.println(in.readLine()); 
     } 

    } catch(IOException e){ 
     System.out.println(e.getMessage()); 
    } 
} 

teşekkürler!

+0

Bunu sanmıyorum (while ((str = in.readLine())! = Null) 'sunucuda engelleme çağrısıdır, bu yüzden ilk okumada" null "olacak ve sonra sonlanacak sunucu. Belki bir başkası 'BufferedReader' hakkında daha fazla bilgiye sahip ve eğer orada engelliyorsa. – Tom

+1

Gerçekten bir * echo * sunucusunu yansıtmayan bir eko sunucusunu arayabilir misiniz? – SergeyA

+0

@thatotherguy Büyük olasılıkla konu şu: konsoldan okumak, sunucuya göndermek ve "echo" yu oku. @OP 'System.out.println (in.readLine());' Ayrıca engelleme yapamazsınız, bu yüzden sunucu çevrimdışı olduğundan (ilk yorumu okuduğumdan) "hiçbir şey" okuyamaz veya Cevap. – Tom

cevap

1

Sorununuzu yeniden oluşturamıyorum. Eksik ithalatları ve son }'u Client.java'da ekledim, derledim ve farklı terminallerde sunucu ve istemci çalıştırdım.

Müşteri:

$ java Client 2000 localhost
foo
foo
bar
bar

Sunucu:

$ java Server 2000
Müşteri istekleri kabul edilir!
foo
bar

İstemci penceresinde bir şeyler yazdı, her zaman, bana geri yinelendi ve aynı hat sunucuda geldi.

+0

Hatamı buldum (tutulma oldu)! Kod gerçekten doğrudur! – emilieee