1

以下は、複数のクライアント接続を受け入れて応答するサーバーがあるコードです。サーバーはクライアントのメッセージを受信できますが、クライアントはサーバー メッセージを受信して​​いません。サーバーでマルチスレッドの概念を使用しました。また、#### でマークされた行を超えると (println ステートメントでさえも) 何も機能しないことがわかりました。そのクライアントがブロックされている可能性があります..何か考えはありますか? サーバー コード: public static void main(String argv[]) throws Exception {

     ServerSocket welcomeSocket = new ServerSocket(10000);

     while(true)
     {

        Socket connectionSocket = welcomeSocket.accept(); 

        Thread t = new Thread(new acceptconnection(connectionSocket));
        t.start();}}


   class acceptconnection implements Runnable{
            BufferedReader inFromClient,inn;
                DataOutputStream ds;
             Socket clientsocket;
        //constructor
        acceptconnection (Socket socket) throws IOException{
        this.clientsocket = socket;
        inn = new BufferedReader (new InputStreamReader(System.in));
        inFromClient =new BufferedReader(new  InputStreamReader(clientsocket.getInputStream()));
        ds = new DataOutputStream(clientsocket.getOutputStream());

         public void run (){
         try {
        String clientSentence, inp;
         while(( clientSentence = inFromClient.readLine())!=null)
         {
               System.out.println("from client" + clientSentence);
               ds.writeBytes("hi from server");**// THIS DOES NOT WORK**
         }

    }


  Client code:

     public static void main(String argv[]) throws Exception
   {

  Socket clientSocket;
   while(true)
  {
   // clientSock
    clientSocket = new Socket("localhost", 10000);
  BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));

  DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
  BufferedReader inFromServer = new BufferedReader(new    InputStreamReader(clientSocket.getInputStream()));

  System.out.println("Enter something:"); 
  sentence = inFromUser.readLine();  
  outToServer.writeBytes(sentence + '\n');// THIS WORKS - thats why server receives it

  **####** modifiedSentence = inFromServer.readLine();**// THIS DOES NOT WORK -client unable to receive** 

  System.out.println("FROM SERVER: " + modifiedSentence + "remote sock add: "+      clientSocket.getRemoteSocketAddress());
4

2 に答える 2

1

クライアントで使用BufferedReader.readLine()しているように、データを書き出すときは必ず改行文字を使用してください。

ds.writeBytes("hi from server\n"); 

そして、すでに述べたように、フラッシュすることを忘れないでください...

ds.flush();
于 2012-09-18T20:00:17.223 に答える
1

サーバー側でストリームをフラッシュする必要があります

 ds.writeBytes("hello world".getBytes());
 ds.flush();
于 2012-09-18T19:53:49.110 に答える