我已經使用select編寫了服務器程序。然後我使用telnet連接客戶端。連接也成功完成。Telnet連接和向服務器發送輸入時的問題
如果輸入長度爲6個字符(包括換行符),則在服務器端顯示長度爲7個字符。怎麼可能。任何人都幫我緊急?
我已經使用select編寫了服務器程序。然後我使用telnet連接客戶端。連接也成功完成。Telnet連接和向服務器發送輸入時的問題
如果輸入長度爲6個字符(包括換行符),則在服務器端顯示長度爲7個字符。怎麼可能。任何人都幫我緊急?
服務器端:
客戶端發送\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
。
你能發表一些代碼嗎?你可以發佈你實際得到的服務器和客戶端看到它嗎? – 2010-07-05 04:52:35
Telnet增加了大量的內容。使用ncat或netcat或nc或除telnet之外的其他任何東西。 – 2010-07-05 04:58:19
如果我想刪除那些我需要做的事情? – muruga 2010-07-05 05:39:22