2017-12-17 19 views
0

この非常に基本的なクライアントサーバーアプリケーションでも問題が発生しています。クライアントはデータを送信していません/サーバーは受信していません。私はどこに問題があるのか​​理解できません。私はソケットについて何も理解していないと思っています。クライアントからサーバーにデータが送信されない

これは、サーバーのコードです:

public class Server 
{ 
public static void main(String args[]) 
{ 
    try{ 
     ServerSocket serverSocket = new ServerSocket(3000); 

     Socket socket = serverSocket.accept(); 

     System.out.println("Client connected: "+socket.getInetAddress.toString()); 

     Scanner scanner = new Scanner(socket.getInputStream()); 

     while(true) 
     { 
      System.out.println(scanner.nextLine()); 
     } 
    }catch(IOException e) 
    { 
     System.out.println("error"); 
    } 
} 
} 

これは、クライアントコードです:

public class Client 
{ 
public static void main(String args[]) 
{ 
    Socket socket; 
    PrintWriter printWriter; 


    try { 
     socket = new Socket("127.0.0.1", 3000); 
     printWriter = new PrintWriter(socket.getOutputStream(), true); 

     while(true) 
     { 
      printWriter.write("frejwnnnnnnnnnnnnnnnnnnnnnnnnosfmxdawehtcielwhctowhg,vort,hyvorjtv,h"); 
      printWriter.flush(); 
     } 

    }catch(IOException e) 
    { 
     System.out.print("error\n"); 
    } 

} 
} 

接続し、私は同じマシン上で両方を実行する場合は、サーバーのプリントが正しく「クライアント.... 」と表示されますが、それ以上は印刷されません。

何が問題ですか?

答えて

1

サーバーは次のを読み取ります。クライアントは行終了を送信しません。したがって、サーバーは、行が終了するはずであることをおそらく知ることができず、ストリーム内のEOLを見つけるまでブロックします。または、クライアントがソケットを閉じるまで。

0

クライアントコードでは、出力ストリームをPrintWriterで飾るので、printlnを使用できます。 によって

printWriter.write("frejwnnnnn...rjtv,h"); 
printWriter.flush(); 

を交換してください:

printWriter.println("frejwnnnnn...rjtv,h"); 

フラッシュ(真のPrintWriterのコンストラクタで)要求自動フラッシュを持っているので、無用です。

サーバーコードで

、あなたは、スキャナの代わりにBuffererdReaderデコレータを使用することができます。

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
String inputLine; 
while ((inputLine = br.readLine()) != null) { 
    System.out.println(inputLine); 
} 
関連する問題