2017-04-18 22 views
0

割り当てを行うときに私は不本意なブロックを見つけました。シンプルなサーバーとクライアントプログラムです。 このプログラムの詳細は次のとおりです。シンプルなクライアントサーバーのJavaプログラムがループしていない

  1. 着信接続をリッスンするサーバークラスEncryptServerを作成します。接続がある場合は、それを受け入れて入出力ストリームを処理するスレッドEncryptServerSessionを作成します。
  2. サーバークラスから入力ストリームと出力ストリームを取り込み、処理するスレッドクラスEncryptServerSessionを作成します。
  3. サーバークラスに接続するクライアントクラスEncryptClientを作成し、出力ストリームをEncryptServerSessionからEncryptServerにします。

EncryptClientクラスのwhileループはどうにか動作しません。私はループに入ることができない。私のコードに何か問題がありますか?前もって感謝します。

EncryptServer

import java.net.*; 
import java.io.*; 

public class EncryptServer 
{  
    public EncryptServer() throws IOException 
    { 
     ServerSocket serverSocket = new ServerSocket(1122); 
     System.out.println("Server started."); 

     while (true) 
     { 
      Socket conSocket = serverSocket.accept(); 
      System.out.println("Client connected from " + 
conSocket.getLocalAddress().getHostName()); 

      Thread session = new 
EncryptServerSession(conSocket.getInputStream(), 
conSocket.getOutputStream()); 
      session.start(); 
    } 
} 
public static void main(String[] args) 
{ 
    try 
    { 
     EncryptServer server = new EncryptServer(); 
    } 
    catch (Exception e) 
    { 
     System.out.println(e); 
    }          
} 

} 

EncryptServerSession

import java.net.*; 
    import java.io.*; 

public class EncryptServerSession extends Thread 
{ 
    BufferedReader in; 
    Writer out; 

public EncryptServerSession(InputStream inStream, OutputStream outStream) 
{ 
    Reader read = new InputStreamReader(inStream); 
    in = new BufferedReader(read); 
    out = new OutputStreamWriter(outStream); 
} 

public void strEncrypt() 
{ 
    try 
    { 
     String message = in.readLine(); 
     out.write(message); 
     out.flush(); 
    } 
    catch (Exception e) 
    { 
    } 
} 

public void run() 
{ 
    try 
    { 
     //System.out.println(in.readLine()); 
     out.write("Please enter the message to be encrypted: "); 
     out.flush(); 

     //strEncrypt(); 

    } 
    catch (Exception e) 
    { 
     System.out.println(e); 
    } 

} 
} 

EncryptClient

import java.net.*; 
import java.io.*; 


public class EncryptClient 
{ 
BufferedReader input, userTerm; 
Writer output; 
String line; 

public EncryptClient() throws IOException 
{ 
    Socket clientSocket = new Socket("localhost", 1122); 
    Reader read = new InputStreamReader(clientSocket.getInputStream()); 
    input = new BufferedReader(read); 

    userTerm = new BufferedReader(new InputStreamReader(System.in)); 
    output = new OutputStreamWriter(clientSocket.getOutputStream());    

    /////////////// Somehow I cannot get into this loop, why? ////////// 
    while (true) 
    { 
     System.out.println("test "); 
     System.out.println(input.readLine()); 
     System.out.println("Enter message to be encrypted: "); 
     output.write(userTerm.readLine());   
     output.flush(); 
    } 
    /////////////// Somehow I cannot get into this loop, why? ////////// 
} 

public static void main(String[] args) 
{ 
    try 
    { 
     EncryptClient client = new EncryptClient(); 
    } 
    catch (Exception e) 
    { 
     System.out.println(e); 
    } 
} 

}

+0

あなたEncryptClientコンストラクタを通過し、System.out.pritnln( "テスト")を追加してくださいでした。 (1つ1つ)ごとにそのようなものがありますか?それはあなたのコードのどの行が掛かっているのかを正確に知ることは役に立ちます。 –

+0

EncryptClientのメインメソッドを実行する前にEncryptServerのmainメソッドを実行しましたか?そうでない場合は、サーバーを最初に実行してからクライアントを実行する必要があるため、この場合があります。ちなみに、実行後にあなたのコンソールには何の出力がありますか? –

+0

ローカルホストが127.0.0.1に翻訳していない私の学校のネットワークで問題が発生しました。あなたはlocalhostではなく127.0.0.1でハードコーディングを試みることができます。私はネットワークではプロではないが、一発の価値がある。また、クライアントの前にサーバーを起動することも忘れないでください。エラーの原因は、ループの前のソケットとストリームです。 – noobcoder

答えて

0

私が理解しているように、サーバーにメッセージを送信し、ロジックを行い、それをクライアントに送り返そうとしています。上記のコードは私の側でうまくいくようです。ここに私がしたことがあります:

  • EncryptServer最初に実行します。私はこれがあなたが直面している問題だと思います。またはあなたのファイアウォールがソケットで聞くことができないかもしれません。
  • EncryptServerSessionで、あなたは行を読み込んでいますが、行を書きません。終了した後にcloseストリームを書き込むか、新しい行を書き込んでください。

    ... 
    
    out.write(message); 
    out.write("\r\n"); // write new line 
    out.flush(); 
    
    ... 
    
    } finally { 
        try { 
         out.close(); 
        } catch (IOException e) { 
        } 
    } 
    

    OR

    ... 
    
    out.write(message); 
    out.write("\r\n"); // write new line 
    out.flush(); 
    
    ... 
    
+0

こんにちは、それは私のためにもうまく走っています。サーバーとクライアントが動作しています。私はちょうどなぜ暗号化クライアントのためのループに入ることができません。 –

関連する問題