| サンプル集 |
|
■VC ■C# ■Java ■BorlandC ■LinuxC ■MS-DOS ■bash ■Excel VBA ■VBScript ■PHP ■HTML ■perl ■iPhone ■Android ■Lua ■other |
| Linuxコマンド |
| 用語集 |
| debian メモ |
| apache2 メモ |
| MySQL メモ |
| Oracle メモ |
| HOME |
No.409で作成したクライアントプログラムに、connectのエラー処理を追加しました。
◆環境| OS | Windows XP Professional Version 2002 Service Pack 3 |
|---|---|
| VC | Microsoft Visual C++ 2008 91179-136-7480673-60595 |
connect関数がSOCKET_ERRORを返した場合、WSAGetLastError関数とperror関数でエラー情報を表示するようにしました。
| winsock2TestClient.cpp | ||
|
10001のポートに接続したいのでnetstatコマンドでネットワークの状態を確認します。
>netstat -a -p TCP
Active Connections
Proto Local Address Foreign Address State
TCP ympc1sv001:echo ympc1sv001.SV001.ymlib.com:0 LISTENING
TCP ympc1sv001:discard ympc1sv001.SV001.ymlib.com:0 LISTENING
:
略
:
TCP ympc1sv001:10001 ympc1sv001.SV001.ymlib.com:0 LISTENING
TCP ympc1sv001:4021 ympc1sv001.SV001.ymlib.com:0 LISTENING
:
略
Active Connections
Proto Local Address Foreign Address State
TCP ympc1sv001:echo ympc1sv001.SV001.ymlib.com:0 LISTENING
TCP ympc1sv001:discard ympc1sv001.SV001.ymlib.com:0 LISTENING
:
略
:
TCP ympc1sv001:10001 ympc1sv001.SV001.ymlib.com:0 LISTENING
TCP ympc1sv001:4021 ympc1sv001.SV001.ymlib.com:0 LISTENING
:
略
ポート10001は状態がLISTENINGと表示されています。 接続待ち状態になっていると判断します。
プログラムを実行し接続してみます。
>winsock2TestClient.exe
10001
localhost
WSAStartup successful.
socket successful.
st=-1 last=10061
connect error!!: No error
10001
localhost
WSAStartup successful.
socket successful.
st=-1 last=10061
connect error!!: No error
connectでエラーが出ました。perrorの方は「No error」となっていますが、WSAGetLastErrorは10061というコードを返しています。
10061を調べたところWSAECONNREFUSEがこれに該当し、エラー理由は「実行中のサーバープログラムが存在しない」というものでした。
先ほどnetstatで調べたときポート10001はLISTENINGになっていたので接続できるはずです。
netstatの結果をIPで表示するよう -n オプションを指定して確認します。
>netstat -a -n -p TCP
Active Connections
Proto Local Address Foreign Address State
TCP 0.0.0.0:7 0.0.0.0:0 LISTENING
TCP 0.0.0.0:9 0.0.0.0:0 LISTENING
:
略
:
TCP 192.168.1.1:10001 0.0.0.0:0 LISTENING
TCP 192.168.9.1:4021 0.0.0.0:0 LISTENING
:
略
Active Connections
Proto Local Address Foreign Address State
TCP 0.0.0.0:7 0.0.0.0:0 LISTENING
TCP 0.0.0.0:9 0.0.0.0:0 LISTENING
:
略
:
TCP 192.168.1.1:10001 0.0.0.0:0 LISTENING
TCP 192.168.9.1:4021 0.0.0.0:0 LISTENING
:
略
ポート10001のローカルIPが192.168.1.1になっていました。 別のポートの4021のローカルIPは192.168.9.1になっています。
今回のテスト用PCはネットワークカードを2枚さしていました。 クライアントは192.168.9.xにいる為、192.168.1.1で待ち受けていてもつながらなかったようです。 192.168.1.1の方のネットワークカードを無効にしてサーバーを再起動したところ待ち受けが192.168.9.1:10001になり接続する事ができました。
Copyright (C) 2012 ymlib.com
