2010-07-05 59 views
1

我已經使用select編寫了服務器程序。然後我使用telnet連接客戶端。連接也成功完成。Telnet連接和向服務器發送輸入時的問題

如果輸入長度爲6個字符(包括換行符),則在服務器端顯示長度爲7個字符。怎麼可能。任何人都幫我緊急?

+1

你能發表一些代碼嗎?你可以發佈你實際得到的服務器和客戶端看到它嗎? – 2010-07-05 04:52:35

+0

Telnet增加了大量的內容。使用ncat或netcat或nc或除telnet之外的其他任何東西。 – 2010-07-05 04:58:19

+0

如果我想刪除那些我需要做的事情? – muruga 2010-07-05 05:39:22

回答

1

服務器端:

客戶端發送\r\n代替\n,這將佔到額外的字符。你可以將它背面採用了簡單的正則表達式轉換爲只是一個換行符:

# $data holds the input line from the client. 
$data =~ s/\r\n/\n/g; # Search for \r\n, replace it with \n 

客戶端:

假設你正在使用Net::Telnet,你可能會發送2個字符換行,\r\n,如Telnet RFC所述。

我鏈接到文檔說此,

在輸入流中, 回車和換行(即 「\ 015 \ 012」或CR LF)的每個序列被轉換成 「 \ N」。在輸出流中,將「\ n」的每個 轉換爲CR LF的 序列。看到binmode()改爲 改變行爲。 TCP協議 通常使用ASCII序列, 回車和換行到 指定一個換行符。

,默認不是二進制模式(binmode),這意味着在你的客戶端數據\n所有實例將\r\n被更換之前被髮送到服務器。

默認Binmode爲0,表示 做換行翻譯。

你可以通過你的文件描述符調用binmode阻止更換你的換行符的模塊,或者在網::遠程登錄的情況下,調用binmode你的對象,並通過1

# Do not translate newlines. 
$obj->binmode(1); 

或者在服務器上,您可以在輸入數據上搜索\r\n並將其替換爲\n