У меня есть сервер, который в цикле ожидает подключения клиентов.После подключения клиента создается новый поток для обработки запросов клиента.Сервер и клиент легко соединяются друг с другом, но проблема с этим потоком заключается в том, что он, похоже, не читает объект, который клиент отправляет в канал.Я проверял везде, но не могу найти проблему.
Код сервера:
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
Может кто-нибудь объяснить мне, что я делаю неправильно?