Windowsのtelnetにラインモード(LineMode)はないっぽい

4年生にネットワークプログラムの練習にechoサーバ作ってみ,とその他いろいろな問題と一緒に渡して僕もちょっと動かしてみたんだけど,なんか期待する動作と違うのね.
以下の動作を期待しているのに

>telnet localhost 12345 # echoサーバは12345番でlisten
hoge # hogeと入力
hoge # サーバからの返信

一文字ごとにそのまま返ってきてしまうぞ?

>telnet localhost 12345
hhooggee # hogeと入力

cygwinやFedora7のtelnetで試してみると,一行単位で期待どおりに返してくれる.以下のスレによるとどうやらWindowsのtelnetクライアントの実装が原因らしい.telnetに関して調べてもなかなか同じ内容で困っている人が見つからなかったんだけど,これは常識なんだろうか…

451 :名前は開発中のものです。:2007/06/23(土) 04:24:21
保守ついでにネタを投下(つか質問だけど)。コンソール上で動くネトゲということで、手始めにTELNET鯖を作ろうとした。
WinXPに入ってるtelnetクライアントは、一文字ずつ送信
Cygwinに入ってる/usr/bin/telnetは、Enterキー押下で送信
DOS窓+日本語入力の際に半角1文字が入力されるたびに送信していると日本語が入力できないので、/usr/bin/telnetのようにEnter押下で送信する機能と一文字ずつ送信する機能を実装したいんだけど、どうすればいいんだろう。
452 :名前は開発中のものです。:2007/06/25(月) 00:31:16
なんかおもしろそうな話なので調べてみた。もう解決済みかもしれないけど一応。telnetは1文字ごとに送信/エコーするのが基本みたいなので1行ごとに送信させるには、オプション設定でラインモードに変更するようにサーバーからクライアントへ要求を出す必要があるようだ。つまりこれはクライアント側で実装されている機能。

手順としてはサーバーからIAC DO LINEMODE(0xFF 0xFD 0x22)を送ってクライアントがIAC WILL LINEMODE(0xFF 0xFB 0x22)を返してくれればOK。

しかしXPのtelnet.exeで試してみたところIAC WONT LINEMODE(0xFF 0xFC 0x22)で拒絶されてしまう。TeraTermでも拒絶。どうやらサブオプションがたくさんあるようなので(RFC1184)それを一緒に設定しないといけないのか、それとも単に実装されていないだけなのか不明。

453 :名前は開発中のものです。:2007/06/25(月) 00:32:36
cygwinは手元に無いのでVineLinuxのtelnetで試してみたらクライアントからラインモード変更要求が来た。要求呑んだらサブオプションも来たが長いので未解読。ちなみに1バイトずつエコーを返しているだけでも2バイト文字は表示された。ただ日本語を入力させるだけならラインモードにしなくてもよさそうだ。

以下参考

3分間NetWorking 第55回 telnet(3)
http://www5e.biglobe.ne.jp/~aji/3min/55.html
telnetオプションとラインモードに関する解説

ネットワーク総合辞書 Telnetとは
http://www.7key.jp/nw/technology/protocol/telnet.html
telnetオプションのネゴシエーション方法

RFC1184 Telnet Linemode Option
http://www.faqs.org/rfcs/rfc1184.html
面倒なので読みたくない。

454 :名前は開発中のものです。:2007/06/25(月) 12:23:58
>>452
検証ありが㌧。451以降別のことやってたのでそれ以上調べてなかった。
サブオプションで切り替えを行ってるんだろうなあとうすうす感じつつも、RFCを深く読んでなかった。
ちゃんと読んでからWinXPのtelnet.exeで試してみる。(1byteエコー/ラインエコー実装しているか)

コンソールゲーム@2ちゃんねる

参考:Telnet‚Æ‚Í -- KeyFŽGŠwŽ–“T