WSARecvは、アクセプトした相手から送られてきたデータを受信するWindowsAPI・・・。
面倒なのは、WSABUF構造体を使わなければならないということ・・・。
WSABUF構造体のwsaBuf, BYTE型配列btBuf, DWORDのdwRecvLen, dwFlagsなどが要る・・・。
アクセプトしたら、
btBufを0で初期化して、wsaBuf.bufにbtBufのアドレスを、wsaBuf.lenにbtBufのサイズをセットする・・・。
WSARecvの第2引数には、WSABUF構造体の配列を渡さなければいけないようになっている・・・。
今回は1つだけなので、wsaBufのアドレスを渡して、第3引数の個数は1・・・。
dwRecvLen, dwFlagsは、必要だがあらかじめ0に初期化して渡している・・・。
iResultがSOCKET_ERRORでなければ受信成功・・・。
btBufの中身が"q"なら、iExitFlagを1にしてこのループを抜ける・・・。
btBufが改行コードだったら、それは消しておいて出力しない・・・。
そうでないなら、btBufを出力・・・。
実は、Windowsのtelnetだと、1度に1文字ずつしか送れないのでこんな風にしている・・・。
WSAStartup success! soc = 124 port = 0fa0, ns_port = a00f setsockopt(SO_REUSEADDR) success. bind Success. listen success. acc = 128 accept!(IPAddress = 127.0.0.1, Port = 61889)
アクセプトすると、サーバ側はこうなるが、telnet側は何も表示されていない状態になる・・・。
(telnet接続しているが、ちゃんと表示されていない感じ・・・。)
telnet側で"a"とだけ入力(Enterとかは不要、本当に"a"だけ・・・。)すると、
WSAStartup success! soc = 124 port = 0fa0, ns_port = a00f setsockopt(SO_REUSEADDR) success. bind Success. listen success. acc = 128 accept!(IPAddress = 127.0.0.1, Port = 61889) a
サーバ側では"a"が出力される・・・。
続いて、"bc"と連続で入れると、
WSAStartup success! soc = 124 port = 0fa0, ns_port = a00f setsockopt(SO_REUSEADDR) success. bind Success. listen success. acc = 128 accept!(IPAddress = 127.0.0.1, Port = 61889) a b c
こんな風に1文字ずつ渡される・・・。
"q"を入れると、
WSAStartup success! soc = 124 port = 0fa0, ns_port = a00f setsockopt(SO_REUSEADDR) success. bind Success. listen success. acc = 128 accept!(IPAddress = 127.0.0.1, Port = 61889) a b c 続行するには何かキーを押してください . . .