2013-05-26 67 views
0

我是Java socket編程新手,尋找一種通過Java套接字向服務器發送命令或對象的好方法。對象應存儲在服務器上,命令應向服務器請求數據。發送對象和命令到服務器

起初服務器不知道他在輸入流中收到了什麼,所以他必須檢查它,但我不知道該怎麼做。我會採取輸入流,將其轉換爲一個字符串,然後檢查第一個字符來決定他們是否形成一個命令或不。我的問題是,InputStream.toString()返回類似 [email protected]

感謝您的意見和想法。

這是我的第一個不錯的辦法:

String input = inputStream.toString(); // this doesn't work 
String startString = 
    input.toString().substring(0, Math.min(input.toString().length(),3)); 

    if(startString.equals(COMMAND)){ 
    // process command, e.g. to request data from the server 
    } 
    else { 
    // extract object to send data to the server 
    } 
+0

這裏有什麼問題?在發送對象?或者確定這是否是必需的對象? – stinepike

+0

你能提供一些你試過的代碼片段嗎?會給我們更好的理解。 –

回答

0

我發現這是如何工作的。訣竅是將inputStream包裝成如下掃描器對象:

Scanner s = new Scanner(inputStream); 
String str = s.nextLine(); 
0

一種方法可以創建數據類型以及爲命令類。

然後可以使用的writeObject的ObjectOutputStream(http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html)的方法來指令/數據發送到使用默認的Java序列化服務器(這是假設所需的類也存在於服務器類路徑)。

然後服務器可以從ObjectInputStream獲取它們,並輕鬆地根據它們的類型採取行動。您必須從Object類型轉換它們,但是如果需要,可以使用.getClass()或instanceof檢查它們的實際類型。

+0

謝謝,但所有這些工作。我只是想知道,如果我從服務器請求數據的方法是好的或可能是天真的,因爲我決定發送一個簡單的字符串作爲請求命令。 – user1812379

0

「簡單」文本命令沒有錯。看看SMTP或HTTP,它只是純文本。

而且有一個很好的理由:您可以將telnet放入您的服務器,然後鍵入命令。這非常有幫助,因爲您可以在沒有特殊客戶端的情況下查詢您的服務器。

舉例的telnet到本地Web服務器(我剛纔輸入「GET /」)

$ telnet localhost 80 
Trying 127.0.0.1... 
Connected to localhost.localdomain. 
Escape character is '^]'. 
GET/
<html> 


<body> 
    <h1>Welcome on xxx</h1> 
</body> 

</html> 

Connection closed by foreign host. 

而且你的服務是不依賴於一種特殊的語言或分別特殊的二進制格式。