2017-02-05 29 views
0

私は、クライアントとサーバーで単純なプロジェクトを作成しようとしています。クライアントは文字列を送信し、サーバーはそれを元に戻してクライアントに返します。しかし、彼らは両方とも、メッセージの送受信時にハングアップしています。だから私はどこに停止して私のプログラムにいるのかを見せてくれるでしょう...ここで私のクライアントとサーバーのコンソール出力です。クライアントがサーバーにメッセージを送信できませんJavaソケット

クライアント

Connecting to server... 
S: Connected to server at 4446 
You sent Oranges, sending message... 

サーバー

Waiting for a connection... 
Connection received from /127.0.0.1 on port 4446 
Waiting for response... 

私はあなたの正確なメッセージの出力と入力を使用する必要があるかのようにについて少し読みました。クライアントが新しい行で入力を送信している場合と同様に、サーバーはその行を読み込むことを期待する必要がありますが、私のコードでは表示されませんが、何とか問題があります。

次のように私のコードがある...

Client.java

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

public class Client 
{ 
    PrintWriter out; 
    Scanner conIn; 

    public static void main(String[] args) throws UnknownHostException, IOException 
    { 
     Client c = new Client(); 
     c.run(); 
    } 

    public void run() throws UnknownHostException, IOException 
    { 
     System.out.println("Connecting to server..."); 
     Socket connection = new Socket("localhost", 4446); //Connects to server 
     out = new PrintWriter(connection.getOutputStream()); 
     conIn = new Scanner(connection.getInputStream()); 
     String msg = conIn.nextLine(); 
     System.out.println(msg); 
     String s = "Oranges"; 
     System.out.println("You sent " + s + ", sending message..."); 
     out.println(s); //STOPS HERE 
     msg = conIn.nextLine(); 
     System.out.println(msg); 
     out.flush(); 
    } 
} 

Server.java

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

public class Server implements Runnable 
{ 
    ServerSocket serverSocket; 
    Scanner in; 
    PrintWriter out; 
    Socket connection = null; 

    public static void main(String[] args) 
    { 
     Server s = new Server(); 
     s.run(); 
    } 

    public void run() 
    { 
     try 
     { 
      serverSocket = new ServerSocket(4446); //Create server 
      System.out.println("Waiting for a connection..."); 
      this.connection = serverSocket.accept(); //Accept connection 
      System.out.println("Connection recieved from " + connection.getInetAddress() + " on port " + connection.getLocalPort()); 
      out = new PrintWriter(connection.getOutputStream()); //Gets output to connection 
      out.flush(); 
      in = new Scanner(connection.getInputStream()); //Gets input to connection 
      out.println("S: Connected to server at " + serverSocket.getLocalPort()); 
      out.flush(); 
      System.out.println("Waiting for response..."); 
      String msg = in.nextLine(); //STOPS HERE 
      System.out.println("Message recieved! Reversing now."); 
      String rMsg = reverse(msg); 
      System.out.println("Returning message..."); 
      out.println("S: Your message was: " + msg + " and it is now " + rMsg); 
      out.flush(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public String reverse(String s) 
    { 
     String revS = ""; 

     for(int i = s.length() - 1; i >= 0; i--) 
     { 
      revS = revS + s.charAt(i); 
     } 
     return revS; 
    } 

} 
+2

アウト '何をすれば後out.flush();を置きます.flush(); '' out.println(s);の直後 '? –

+0

ああ、働いているようです、ありがとう!私は彼らが毎回何かを積み重ねたいと思っていました。あなたがたくさんの成果を送った後にそれを行うことができました。しかし、私はそれが本当に多くの意味をなさないことを推測する。ありがとう – Carson

+1

データの相互送信を待っているときにスタックすることはできません。出力と入力を同時に行うためにスレッディングを使用するほうがはるかに優れています。 –

答えて

関連する問題