【发布时间】:2012-01-27 22:19:59
【问题描述】:
我的客户端应用程序需要能够在多种情况下恢复。 当电源打开时,客户端从文件中读取地址和端口并尝试连接到服务器。 如果这是第一次在此主机上使用此客户端,则尝试使用默认 IP 地址,但这可能不正确。 然后用户需要输入正确的 IP 地址。端口是硬编码的。 它现在的工作方式是一秒摆动。Timer 尝试获取服务器的状态...
statusTimer = new Timer(ONE_SECOND, new ActionListener() {
public void actionPerformed(ActionEvent e) {
final byte GET_STATUS = 20;
SendCommand(GET_STATUS, null);
}
});
statusTimer.start();
如果没有连接,则要求用户连接...
private void SendCommand(byte command, byte[] parameters) {
if ((null == socket) || (null == outputStream) || socket.isClosed())
if (JOptionPane.YES_OPTION ==
JOptionPane.showConfirmDialog(null, "Connect?"))
Connect();
...
private void Connect() {
String s = (String)
JOptionPane.showInputDialog(null, "Enter IP Address", ipAddress);
if (validateIp(s)) {
ipAddress = s;
connectTask = new ConnectTask();
connectTask.start();
...
socket被打开,io流被设置,一个RxThread被启动。
class ConnectTask extends Thread {
@Override public void run() {
try {
if (null == socket) socket = new Socket(ipAddress, TCP_PORT);
if (null == outputStream) outputStream = socket.getOutputStream();
if (null == inputStream) inputStream = socket.getInputStream();
if (null == rxThread) rxThread = new RxThread();
...
此时可能会发生一些不好的事情,例如:
1. 客户端开启时服务器可能处于关闭状态。客户端自动打开套接字,设置io流,并在服务器上电时继续的最佳方式是什么?
2. 同样,服务器可能会在读取、写入或两者都没有看到电源循环。有没有恢复供电后自动恢复的好办法?
3. IP 地址可能需要按上述方法进行更正。
在不需要用户关闭和打开客户端应用程序或重启系统的情况下处理这些和其他情况会很好。
防弹的 Java 客户端套接字需要什么样的方法?
This 和 this 相似,但处理的是服务器套接字
【问题讨论】: