2015-11-24 91 views
0

我目前正在嘗試編寫Java應用程序來檢查遊戲Archeage的服務器是否在線。我已經得到了以下數據: 上古世紀EU服務器IP:193.105.173.130 使用的端口:80,1237,1239,1250「Ping」Java中的服務器

我設法檢查使用被稱爲Tcping工具的端口,但我想編寫一個Java應用程序,它將具有一些GUI,並在建立連接時播放聲音或執行其他操作。

目前,我堅持用下面的代碼(這是因某些原因無法工作):

package Code; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.Socket; 

import javax.swing.JOptionPane; 

public class SocketCheck { 

    public static void main(String[] args) throws IOException { 
     String serverAddress = JOptionPane.showInputDialog(
      "Enter IP Address of a machine that is\n" + 
      "running the date service on port 80:"); 
     Socket s = new Socket(serverAddress, 80); 
     BufferedReader input = 
      new BufferedReader(new InputStreamReader(s.getInputStream())); 

     String answer = input.readLine(); 
     JOptionPane.showMessageDialog(null, answer); 

     s.close(); 
     System.exit(0); 
    } 
} 

錯誤消息我得到:

Exception in thread "main" java.net.SocketException: Connection reset 
    at java.net.SocketInputStream.read(Unknown Source) 
    at java.net.SocketInputStream.read(Unknown Source) 
    at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) 
    at sun.nio.cs.StreamDecoder.implRead(Unknown Source) 
    at sun.nio.cs.StreamDecoder.read(Unknown Source) 
    at java.io.InputStreamReader.read(Unknown Source) 
    at java.io.BufferedReader.fill(Unknown Source) 
    at java.io.BufferedReader.readLine(Unknown Source) 
    at java.io.BufferedReader.readLine(Unknown Source) 
    at Code.SocketCheck.main(SocketCheck.java:29) 

我在做什麼錯?

+0

很抱歉,我無法訪問服務器代碼。這不是我的遊戲。我甚至不需要收到某種預定義的消息,我只想檢查服務器是否啓動並運行。 – Justin

+0

@vishalgajera垃圾。除了端口以外,您不需要知道任何關於服務器的信息,以查看它是否在運行。 – EJP

+0

@vishalgajera這是一個奇怪的方式把它。 *要麼*我是正確的*或*我錯了:沒有'可能'關於它;這不是一個不令我滿意的問題:這是一個事實問題,很容易通過分析或實驗來確定。 – EJP

回答

2

擺脫readLine()BufferedReader等等。一個HTTP服務器不會向你發送任何東西,它正在等待你發送一個請求,並且它最終會讓你出去。毫無意義,等待或者做任何I/O。您設法建立連接的事實足以證明服務器已啓動。

+0

所以我只需要使用'is.connected()'方法來檢查連接是否已經建立? – Justin

+0

你甚至不需要那樣做。用你發佈的代碼,存在'Socket'或拋出異常。如果存在,則連接。 – EJP

+0

因此,爲了正確的異常處理,我應該使用'try {}'和'catch {}'塊來代替'throws' ......嗯,這個解決方案非常簡單,現在我覺得很愚蠢。無論如何,感謝這麼快速和翔實的迴應! – Justin