WSASend

WSASendは、接続先サーバにデータを送信するWindowsAPI・・・。

WSASend function (Windows)

サーバ側はWSARecvとし、クライアント側はWSASendプロジェクトを作成・・・。

サーバ側は、

WSARecvで読み込んだ文字列が"end"だったら、ループを抜けて、アクセプトソケット、サーバソケットともに閉じて終了する・・・。
そうでない間は、読み込んだ文字列を標準出力する・・・。

クライアント側は、

fgetsで入力した文字列をszInputBufに格納・・・。
入力文字列が"fin"なら、WSASendでサーバに"end"を送って、サーバ側に終了要求を投げ、なおかつ、クライアント自分自身もループから抜けて終了する・・・。
そうでない場合は、WSASendでサーバに入力文字列szInputBufの内容を送信・・・。

WSARecv側を実行すると、

WSAStartup success!
soc = 124
port = 0fa0, ns_port = a00f
setsockopt(SO_REUSEADDR) success.
bind Success.
listen success.

この状態で、WSASend側を実行・・・。

WSAStartup success!
hostname: localhost
port: 4000
host->h_addr_list[0][0] = 7f, host->h_addr_list[0][1] = 00, host->h_addr_list[0]
[3] = 00, host->h_addr_list[0][3] = 01
soc = 408
port = 0fa0, ns_port = a00f
WSAConnect success.
>

WSARecv側は、

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 = 49412)

WSASend側で、"abc"と入力すると、

WSAStartup success!
hostname: localhost
port: 4000
host->h_addr_list[0][0] = 7f, host->h_addr_list[0][1] = 00, host->h_addr_list[0]
[3] = 00, host->h_addr_list[0][3] = 01
soc = 408
port = 0fa0, ns_port = a00f
WSAConnect success.
>abc
>

WSARecv側は、

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 = 49412)
abc

"abc"が送られてきている・・・。
"end"を入力すると、

>abc
>end
>

WSARecv側だけ終了する・・・。
WSASend側もセッションが切れるので、ちょっと入力しているとすでに終了してるのがわかる・・・。

"fin"の場合、WSARecv側は、

abc
続行するには何かキーを押してください . . .

WSASend側は、

WSAConnect success.
>abc
>fin

C:\Project\Cloud\github.com\Sample\winapi\WSASend\WSASend\src\WSASend\release>

と両方終了している・・・。

Sample/WSASend.cpp at master · bg1bgst333/Sample · GitHub
Sample/WSARecv.cpp at master · bg1bgst333/Sample · GitHub