java - 如何公开服务器socket信息?

标签 java sockets process

我有一个在后台运行的 java 进程正在监听端口。每次启动进程时,它监听的端口可能会发生变化,但假设该进程将长期运行(尝试永远运行,并在出现故障时自行重新启动)。

我目前的做法是在套接字开始成功监听后将套接字信息写入文件,连接到服务器套接字的API将读取该文件。所以我的问题是:

1.有没有更好的方法来公开套接字信息?更好意味着更少出错、更快或更干净的代码。

2.如果文件 IO 是一种可接受的方法,那么我应该注意哪些最佳实践以最大程度地减少潜在问题。

最佳答案

如果您的所有潜在客户端都可以访问该文件,则文件 I/O 没问题,但这似乎有点笨拙 - 如果您的客户端同时使用 Windows 和基于 Unix 的操作系统,会发生什么情况?您的客户端和服务器之间是否存在可能阻止他们访问此文件的防火墙?这并非不可能处理,但如果您不想将该文件保持打开状态以供全世界查看,则还必须考虑权限。

另一种方法可能是在 UDP 数据报中广播特定端口/IP,但您将被迫使用特定广播组来实现此目的。

正如其他人所建议的,另一种选择可能是托管一项服务,列出您的客户端可以首先访问的服务器 IP/端口所在的位置。

关于java - 如何公开服务器socket信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387065/

相关文章:

java - 如何使用客户端计算机的Java套接字在服务器计算机上创建目录?

java - 通过 Spring 使用 REST Web 服务

c++ - 回声服务器示例

java - 获取典型库 1.7 中 simpledb 域的所有项目

sockets - 监听对 UDP 多播消息的 UDP 单播回复

windows - 获取进程桌面

linux - scanmem (Linux) 与 CheatEngine (Win)

c# - 无法从 GetProcessId(.. hWnd) (pInvoke) 中提取进程 ID

java - Junit 测试用例中的代码可重用性

java - 使用 Geotools 创建 Google map 叠加层