Сервер не может прочитать объект из потока клиентских сокетов, почему? - PullRequest
1 голос
/ 24 декабря 2011

У меня есть сервер, который в цикле ожидает подключения клиентов.После подключения клиента создается новый поток для обработки запросов клиента.Сервер и клиент легко соединяются друг с другом, но проблема с этим потоком заключается в том, что он, похоже, не читает объект, который клиент отправляет в канал.Я проверял везде, но не могу найти проблему.

Код сервера:

public class Server 
{
    private ServerSocket server;

    public Server(int port) throws IOException
    {
        //Port 9367
        this.server = new ServerSocket(port);
        this.server.setReuseAddress(true);
    }

    public void start() throws IOException
    {
        System.out.println("Waiting for client...");
        while(true)
        {
            new Thread(new ClientRequestManager(server.accept())).start();
            System.out.println("client found !");
        }
    }
}

Код ClientRequestManager:

public void run() 
{
    try {
        ObjectInputStream objectInput = new ObjectInputStream(clientSocket.getInputStream());

        System.out.println("Waiting for request...");
        while(true)
        {
            DataRequest request = (DataRequest)objectInput.readObject();

            if(request instanceof TestDataRequest)
            {
                new Thread(new TestEntityManager((TestDataRequest)request, this.clientSocket)).start();
                System.out.println("Client dispatched to the test entity manager !");
            }
            System.out.println("Can't find the right entity manager !");          
        }
    } catch (Exception e) { }   
}

Сервер застревает здесь: запрос DataRequest = (DataRequest) objectInput.readObject ();

Вот основной код, который я написал для клиента для тестирования сервера:

        //TestDataRequest inherit DataRequest
    TestDataRequest request = new TestDataRequest();
    request.setID(30);
    request.setDescription("test");

    Socket serverSocket = new Socket("localhost",9367);

    ObjectOutputStream clientOutputStream = new ObjectOutputStream(serverSocket.getOutputStream());

    System.out.println("Sending data...");
    clientOutputStream.writeObject(request);
    clientOutputStream.flush();
    System.out.println("Data send !");

Я не получаю никакой ошибки, поток просто блокируется.Я предполагаю, что он ожидает записи объекта в канал, как и должно быть, но он все еще блокируется, когда клиент записывает объект в канал.Я не понимаю почему.Объект реализует сериализуемый ... Сервер и клиент, кажется, соединены друг с другом и записывают / читают в один и тот же канал ...

Сервер: addr = / 127.0.0.1, порт = 49654,localport = 9367

Клиент: addr = localhost / 127.0.0.1, port = 9367, localport = 49654

Может кто-нибудь объяснить мне, что я делаю неправильно?

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