Продолжайте пытаться связаться с сервером, пока не придет ответ - PullRequest
1 голос
/ 31 марта 2011

Мне нужно написать программу с машинами P0, P1 так, чтобы любая машина могла быть запущена первой и ей нужно было связаться с другой.Допустим, P1 запускается, тогда ему нужно продолжать пытаться связаться с P0, пока он не получит подтверждение от P0.Как я могу сделать это, используя сокет-программирование в Java.

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

Вот что я делаю

int P1Ack = 1;

while(P1Ack != 1) // where P1Ack is the acknowledgment that P0 sends if it gets a message from P1
    {
               P1connectsP0();
    }


public void P1ConnectsP0()
{
      String str = "Hello";

        {
            Socket clientSock = new Socket(lamport.P0Ip, lamport.P0Port);
            ObjectOutputStream clientWriter = new ObjectOutputStream(clientSock.getOutputStream());
            ObjectInputStream clientReader = new ObjectInputStream(clientSock.getInputStream());
            clientWriter.writeObject(str);
            clientWriter.flush();
        }
        catch(IOException ex)
        {
            System.out.println("Error : P1 unable to talk to P0");
            ex.printStackTrace();
        }

1 Ответ

0 голосов
/ 31 марта 2011

Вы, похоже, используете здесь объект Socket, который является TCP-сокетом в Java. Протокол TCP гарантирует доставку пакетов, поэтому вам не нужно выполнять подтверждение вручную.

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