2011-03-12 213 views
2

我在寫這個微小的實用程序方法來測試將原始數據包發送到特定的消息傳遞網絡(計劃開發客戶端以連接到它)。通過TCP套接字發送數據包

該網絡是Deviantart消息網絡(chat.deviantart.com:3900; TCP)。

我的類:

protected void connect() throws IOException{ 

    Socket dAmn = null; 
    //BufferedWriter out = null; 
    PrintWriter out = null; 
    BufferedReader in = null; 

    /* 
    * Create Socket Connection 
    */ 
    try{ 
     dAmn = 
      new Socket("chat.deviantart.com", 3900); 
     /*out = 
      new BufferedWriter(new OutputStreamWriter(dAmn.getOutputStream()));*/ 
     out = 
      new PrintWriter(dAmn.getOutputStream(), true); 
     in = 
      new BufferedReader(new InputStreamReader(dAmn.getInputStream())); 
    } 
    catch(SocketException e){ 
     System.err.println("No host or port for given connection"); 
     //handle 
    } 
    catch(IOException e){ 
     System.err.println("I/O Error on host"); 
     //handle 
    } 
    String userInput; 
    BufferedReader userIn = 
         new BufferedReader(new InputStreamReader(System.in)); 

    /* 
    * dAmn communication 
    */ 

    while((userInput = userIn.readLine()) != null){ 
     out.write(userInput); 
     System.out.println(in.readLine()); 
    } 
    if(in!=null) 
     in.close(); 
    if(out!=null) 
     out.close(); 
    if(dAmn!=null) 
     dAmn.close(); 
} 

服務器需要一個握手之前登錄可以繼續發送。一個典型的登錄數據包看起來像這樣:

dAmnclient damnClient(目前0.3) 劑=

每個分組必須使用換行和空結束。

我握手包看起來是這樣的:

dAmnClient 0.3 \ nagent = SomeAgent \ n \ 0

然而,服務器只需用斷開回復

我認爲某件事情是錯誤的被解析,有什麼建議?另外,如果你在幫我出超級位數的:這裏的客戶端上的一些簡單的文檔 - >服務器該死的協議: http://botdom.com/wiki/DAmn#dAmnClient_.28handshake.29

回答

4

你應該使用Wireshark

使用Wireshark,你可以自/至主機監聽通信。它可以很容易地發現應用程序除了標準客戶端以外的其他功能。

BTW你有代理=前的\ n,這可能是問題

0

讀取用戶將不包含實際的線路終端的線,它不包含任何空終止無論是。在輸入處鍵入\ n實際上會傳輸「\ n」而不是換行符。

您也可以用的println替換寫入添加新線(小心,它可以使用\ n \ r \ n或只是\取決於平臺R):

out.println(userInput); 

你可以支持數據包終止例如通過檢查特定用戶輸入,如下所示:

if (userInput.equals(".")) { 
    out.write((char) 0); 
    out.flush(); 
} else { 
    out.println(userInput); 
} 

用戶現在可以通過輸入點來終止數據包。

(實際上,代碼可以自動無需等待用戶輸入進行握手,但這是另一個故事。)

+0

簡化版,.WRITE()自動刷新? – Francis 2011-03-12 23:39:10

相關問題