我正在用java编写应用程序,
此应用程序的工作方式是它必须连接到专用网络中的每个服务器,只给出一个起始端口和IP,
我在这个应用程序中做的第一件事是连接到命令行指定的IP和端口, (通过开始一个新线程)
我建立此连接后,会收到一个我必须连接的更多IP和端口的列表。
但是,我还必须通过发送字符串(每30秒由协议指定)保持与当前IP和端口“打开”的连接;
问题出在这里:一旦我从初始连接收到列表,我进入一个无限运行的while(true)循环并每隔30秒发送一个指定的字符串,(这让另一端知道我还在那里)
但是因为循环无限运行,我无法连接到其他IP和端口,因为我需要打破循环才能启动新线程连接到另一个IP。
我的代码有点麻烦,所以我会尝试用伪代码解释它: (如果有帮助,我可以编辑发布我的实际代码)
Main:
port = args[0]
IP = args[1]
try{
new Thread
}
Thread:
connect(Ip, Port)
recieve IPlist
while(true){ <---- this is where I get stuck
send ping every 30 seconds
}
我希望能够维持连接并创建新连接。 我认为这更像是一个设计问题,而不是编码问题。
此外,我希望我的问题写得很好,如果你将其投票,请告诉我如何改进它。
答案 0 :(得分:0)
我希望能够维持连接并创建新连接。
你需要一个循环,它在同一个循环中完成,
while(true){ <---- this is where I get stuck
open any connection which need openning
send ping every 30 seconds
any thing else.
}
这有一个问题,即如果连接阻塞,可能会导致所有连接无法发送心跳,但实现起来很简单。
OR
你可以有一个单独的线程管理每个连接,根据需要发送心跳,而你的主线程只涉及要建立的连接。
OR
你有一个线程用于向所有打开的连接发送心跳,而你的主线程管理哪些应该打开。
你觉得最简单的取决于你。