2017-09-30 8 views
0

クライアントがサーバーに文字列を送り、サーバーが逆の文字列で応答する単純で基本的なJavaプログラムを作成しようとしています。私は正しいプログラム構造とフローを持っていると確信していますが、私のサーバはクライアントから文字列を読み込まない。私はサーバー側でこの行に問題を絞り込んだ:string = inputStream.readLine(); ここに私のコードです。何が問題なの?ソケットを使用したJavaでのクライアント - サーバー通信

Server1.java

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

class Server1 { 

    public static void main(String[] args) throws Exception { 
     String string = null; 

     ServerSocket myServerSocket = new ServerSocket(4000); //Create Socket 
     System.out.println("Server Running..."); 

     Socket clientSocket = myServerSocket.accept(); 

     DataInputStream inputStream = new DataInputStream(clientSocket.getInputStream()); 
     PrintStream outputStream = new PrintStream(clientSocket.getOutputStream()); 


     do { 
      string = inputStream.readLine(); 


      if(string!=null){   

      //using StringBuilder method to reverse string 
      StringBuilder input = new StringBuilder(); 

      // append a string into StringBuilder input1 
      input.append(input); 

      // reverse StringBuilder input1 
      input = input.reverse(); 

      // print reversed String 
      for (int i = 0; i < input.length(); i++) { 
       outputStream.println(input.charAt(i)); 
      } 
      } 

     } while (true); 

     /*outputStream.println("exit"); 
     outputStream.close(); 
     inputStream.close(); 
     myServerSocket.close(); 
     System.out.println("Server Closed!");*/ 
    } 
} 

Client1.java

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

import java.util.Scanner; 

class Client1 { 

    public static void main(String[] args) throws Exception { 
     Scanner sc = new Scanner(System.in); //Object to read keyboard input 
     String string = null, response = null; //Variable to store string 

     Socket mySocket = new Socket("127.0.0.1", 4000); //Create Socket 

     DataOutputStream outputStream = new DataOutputStream(mySocket.getOutputStream()); 
     DataInputStream inputStream = new DataInputStream(mySocket.getInputStream()); 

     System.out.println("Client Running..."); 

     do { 
      System.out.println("Type in a string and Press Enter..."); 
      string = sc.next(); 
      outputStream.writeBytes(string); 
      response = inputStream.readLine(); 
      if (response != null) { 
       System.out.println("Server Response: " + response); 
      } 

     } while (true); 

    } 
} 
+0

は、コードを試していないが、 '' 'Scanner.next'''は何で改行を入れませんストリングの終わりであるため、サーバーは改行を無期限に待つことになります。コードの残りが大丈夫なら '' '\ n''や' '\ n''の組み合わせを送信してください。注意: '' 'Scanner.next'''はトークンを提供し、' 'Scanner.nextLine'''は行全体を提供します(まだ改行なし)。サイドノート2:より速い操作のために、書き込み後に出力ストリームを「フラッシュ」したいかもしれません。 – tevemadar

答えて

0

問題は、この行の文字列に= inputStream.readLine()。

0

を終了し、私はシンプルで、基本的なJavaプログラム場所を記述しようとしています、行を探して、あなたが文句を言わない追加した場合、「\ rを\をn」は、あなたのマッサージの終わりに、それはラインを探し続けますクライアント はサーバーに文字列を送信し、サーバーは の逆の文字列で応答することになっています。 私は正しいプログラム構造を持っていると確信していますフロー私のサーバは私のクライアントから文字列を読み込まれません。私は サーバー側でこの行に問題を絞り込んだ:string = inputStream.readLine();ここに私のコードです。何が問題なの?

ここでは、コピー貼り間違いを見ることができます。クライアントからのメッセージを読み取るための(真の)whileループ

// append a string into StringBuilder input1 
      input.append(input); 

が常に使用、 は、あなたの質問のためとして、コードの下に試してみてください。

Server1.java

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 

    public class Server1 { 

      private static Socket socket; 

      public static void main(String[] args) { 
       try { 
        ServerSocket serverSocket = new ServerSocket(4000); 
        System.out.println("Server Running..."); 

        //Note: Server is running always. This is done using this while(true) loop 
        while (true) { 
         //Reading the message from the client 
         socket = serverSocket.accept(); 
         InputStream is = socket.getInputStream(); 
         InputStreamReader isr = new InputStreamReader(is); 
         BufferedReader br = new BufferedReader(isr); 
         String string = br.readLine(); 
         System.out.println("Message received from client is " + string); 
         //Reverse string responce builder 
         try { 
          //using StringBuilder method to reverse string 
          StringBuilder input = new StringBuilder(); 
          // append a string into StringBuilder input 
          input.append(string); 
          // reverse StringBuilder input 
          input = input.reverse(); 
          string = input + "\n"; //Next to line 
          // print reversed String 
          for (int i = 0; i < input.length(); i++) { 
           System.out.println(input.charAt(i)); 
          } 
         } catch (Exception e) { 
          //Invalid text message back to client. 
          string = "Please send a proper text message\n"; 
         } 
         //Sending the response back to the client. 
         OutputStream os = socket.getOutputStream(); 
         OutputStreamWriter osw = new OutputStreamWriter(os); 
         BufferedWriter bw = new BufferedWriter(osw); 
         bw.write(string); 
         System.out.println("Message sent to the client is " + string); 
         bw.flush(); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } finally { 
        try { 
         socket.close(); 
        } catch (Exception e) { 
        } 
       } 
      } 
     } 

Client1.java

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.Socket; 
import java.util.Scanner; 

public class Client1 { 

    private static Socket socket; 

    public static void main(String args[]) { 
     try { 
      socket = new Socket("127.0.0.1", 4000); 
      System.out.println("Client Running..."); 

      //Send the message to the server 
      OutputStream os = socket.getOutputStream(); 
      OutputStreamWriter osw = new OutputStreamWriter(os); 
      BufferedWriter bw = new BufferedWriter(osw); 
      System.out.println("Type in a string and Press Enter..."); 
      Scanner sc = new Scanner(System.in); 
      String string = sc.next(); 
      System.out.println("string = " + string); 
      String sendMessage = string + "\n"; ////Next to line 
      bw.write(sendMessage); 
      bw.flush(); 
      System.out.println("Message sent to the server : " + sendMessage); 

      //Get the return message from the server 
      InputStream is = socket.getInputStream(); 
      InputStreamReader isr = new InputStreamReader(is); 
      BufferedReader br = new BufferedReader(isr); 
      String message = br.readLine(); 
      System.out.println("Message received from the server : " + message); 
     } catch (Exception exception) { 
      exception.printStackTrace(); 
     } finally { 
      //finally close the socket 
      try { 
       socket.close(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
関連する問題