Сообщение не отправлено обратно клиенту в Java - PullRequest
1 голос
/ 19 марта 2012

Строка, объявленная в клиенте, отправляется на сервер и успешно выводится на консоль.Никакое сообщение не отправляется обратно клиенту.Нет сообщений об ошибках, чтобы сообщить.Приложение просто сидело в ожидании.Есть идеи, где я иду не так?

Тема ClientWorker

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

public class HTCPCPClientWorker extends Thread {

    Socket cwsocket = null;

    public HTCPCPClientWorker(Socket cwsocket) {
        super("ClientWorker");
        this.cwsocket = cwsocket;
    }

    @Override
    public void run() {

        String clientSentence = null;
        // Create input and output stream
        BufferedReader inFromClient = null;
        PrintWriter outToClient = null;

        try {

            do {  // wait for 'QUIT'              
                // Create input stream
                inFromClient = new BufferedReader(new InputStreamReader(cwsocket.getInputStream()));

                System.out.println("\nMESSAGE FROM CLIENT:");

                do {
                    clientSentence = inFromClient.readLine();
                    System.out.println("\t" + clientSentence);

                    if (clientSentence.equals("@@") == true) {

//                      send message to client
                        if (clientSentence.contains("BREW")) {

                             outToClient = new PrintWriter(cwsocket.getOutputStream(), true);

                            outToClient.println("HTCPCP-new 200 OK BREW START command completed.");
                            outToClient.println("Content-length:  " + clientSentence.length()); 
                            outToClient.println("@@"); // terminating chars
                            outToClient.flush();
                        }
                        break;
                    }
                } while (true);

            } while (!clientSentence.contains("QUIT"));

            cwsocket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    } // end run


} // end HTCPCPClientWorker.java

Клиент

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class HTCPCPClient {

    public static void main(String[] args) throws IOException {

        HTCPCPClient client = new HTCPCPClient();
        System.out.println("WELCOME TO THE APPLICATION!");
        client.startClient();
    }

    private void startClient() throws IOException {
        final String HOST = "localhost";
        final int PORT_NUMBER = 4444;
        Socket clientSocket = null;
        PrintWriter outToServer = null;
        BufferedReader in = null;
        String serverSentence = null;
        String clientSentence = null;
        BufferedReader inFromServer = null;

        // create new socket
        clientSocket = new Socket(HOST, PORT_NUMBER);
        outToServer = new PrintWriter(clientSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        do {  // wait for 'QUIT'              
            // Create input stream
            inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

            // message to send.  Will accept user input later
            clientSentence = "BREW coffee://127.0.0.1/pot-1";

            // Send clientSentence to server
            outToServer.println(clientSentence);
            outToServer.flush();

            System.out.println("\nMESSAGE FROM SERVER:");

            do {
                serverSentence = inFromServer.readLine();
                System.out.println("\t" + serverSentence);

                if (serverSentence.equals("@@") == true) {
                    break;
                }
            } while (true);
            // read and print message from server

        } while (!clientSentence.contains("QUIT"));

        // close connections 
        outToServer.close();
        in.close();
        inFromServer.close();
        clientSocket.close();
    }
}

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Я не понимаю код.В частности, эта часть:

if (clientSentence.equals("@@") == true) {
//   send message to client
     if (clientSentence.contains("BREW")) {
         // do stuff
     }
break;
}

Часть "do stuff" никогда не вызывается, так как clientSentence не может быть одновременно "@@" и содержать "BREW".

Вы также можетехотел бы немного изменить код.Это выглядит сложно.Но это только мое мнение.

1 голос
/ 19 марта 2012

Я думаю, что после отображения сообщения от клиента класс ClientWorker проверяет следующие два условия

if (clientSentence.equals("@@") == true)

и

if (clientSentence.contains("BREW"))

Таким образом, когда эти Условия выполняются, тогда только элемент управления войдет во внутренний блок и отправит сообщение. Таким образом, вы должны убедиться, что эти два условия выполнены.

Здесь в первом условии вы используете метод equals (), поэтому, если условие this истинно, внутреннее условие if никогда не будет выполнено. Поэтому вы должны подумать об этих условиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...