编辑 2重命名问题
我有一些 Java 代码(客户端),它启动了一个用 C#(服务器)编写的单独进程。C#进程传递一对套接字(一个到listen
on,一个reply
到);当它接收到listen
套接字上的连接时,它会处理发送的数据并回复套接字上的同一 IP reply
。该过程旨在连续运行,侦听连接并回复。由于它总是回复同一个 IP,它当然可以接受来自许多不同客户端的消息。Java 代码依次侦听进程的响应。
尽管这是一个非常基本的系统,但除了一个问题外,该设置运行良好。Java 代码在发送消息之前确定进程是否正在运行,使用 和 之类的Process.waitFor()
方法Process.exitValue()
。我遇到的问题是该进程在启动后的几秒钟内还没有准备好实际接收消息。
我的问题是服务器告诉客户端它已经启动的最佳模式是什么?我想到的选项包括:
- Java 进程反复尝试连接并发送测试消息,仅在收到响应时才停止
- C# 进程在启动时向客户端 IP 列表广播
- Java 只需等待几秒钟,然后尝试连接
尽管我倾向于选项 1),但我并不特别喜欢上述任何选项。这里有什么既定的模式可以使用吗?
请注意,我不想为此通信使用任何现有框架。实际上消息非常简单,两端的消息代码“手动”编码和解码为字节流——为了节省一百多行代码,我不想改变这一点。
我意识到这种类型的“最佳方式”问题可能会因为不具建设性而被关闭,但我已经用谷歌搜索了几个小时,却一无所获。任何帮助或建议将不胜感激:)
编辑 - 更多上下文
尽管大多数客户端/服务器关系都涉及服务器在任何客户端尝试连接之前很久就启动(从而完全避免了这个问题),但这里的设置略有不同。
在这种情况下,客户端在需要时有效地启动服务器。此外,如果客户端可以看到服务器进程没有运行,它会启动一个新进程。在这两种情况下,客户端都需要在发送第一条消息之前知道服务器何时初始化(而不仅仅是进程何时开始)