我的客戶端應用程序需要能夠在幾種情況下恢復。 打開電源時,客戶端從文件讀取地址和端口並嘗試連接到服務器。 如果這是第一次在此主機上使用此客戶端,則嘗試使用默認IP地址,但這可能不正確。 用戶然後需要輸入正確的IP地址。該端口是硬編碼的。 現在的工作方式是一秒鐘的swing.Timer嘗試獲取服務器的狀態...強大的Java Socket編程
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();
...
打開套接字,設置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類似,但與服務器的套接字協議