java - 继续尝试联系服务器,直到收到响应

标签 java sockets

我需要编写一个带有机器 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();
        }

最佳答案

你在这里似乎使用了一个Socket对象,它是Java中的TCP套接字。 TCP 协议(protocol)保证数据包的传送,因此您不需要进行手动确认。

关于java - 继续尝试联系服务器,直到收到响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5493771/

相关文章:

java - 连接的热点设备列表

java - @PropertyMapping注解@DataJpaTest、@AutoConfigureTestDatabase不能与@Component注解@Configuration结合使用

java - 使用 Netty 进行异步应用程序设计

sockets - Linux - 带有 FIONREAD 的 ioctl 始终为 0

java - 如何在不使用常规客户端-服务器套接字编程的情况下在java中发送字节?

c++ - 一个IP地址和一个端口号可以唯一标识一个进程号吗?

python - tcp 套接字,select 告诉可写,但 write() 会阻塞

java - 从 Unicode 字符串中获取字数(任何语言)

java - 使用 UIManager 的 TitledBorder 边框颜色和宽度

java - 从 weblogic 集群获取实例 ip