
いつも拝見させていただいております。
このたびは、皆様のお知恵をお借りしたく質問させていただきました。
ソケット通信を行いたく、以下のサンプルを作成いたしました。
この関数を5回ループさせると、エラーが起きてしまいます。
エラーコードは10061です。
解決方法をご存知の型が降りましたら、
ご教授ください。
よろしくお願いいたします。
(VC++での開発です)
extern "C" __declspec( dllexport ) bool __stdcall ssl_SockOpen(LPSTR p_c_IpAddress, LPSTR p_c_PortNum)
{
struct sockaddr_in addr;//socketの情報を代入する構造体
WSADATA p_obj_SockInit;//Windows Sockets初期化変数
//■ Windows Socketsを初期化する
WSAStartup( 0x0101, &p_obj_SockInit );
//■ ソケット確保
if( (g_obj_Socket = socket( AF_INET, SOCK_STREAM, 0 )) < 0 ){
pMsg = "ソケットの確保に失敗しました。";
return false;
}
//■ ソケットの情報を入れる
memset( &addr, 0, sizeof( addr ) );//構造体addrの初期化
addr.sin_family = AF_INET;//AF_INETを指定
addr.sin_port = htons( atoi( p_c_PortNum ) );//ポートを指定
addr.sin_addr.s_addr = inet_addr( p_c_IpAddress );//inet_addr()により指定されたIPを構造体に代入
//■ 接続要求を行う▼▼▼▼ここでエラー!!▼▼▼▼
if( connect( g_obj_Socket, (struct sockaddr *)&addr, sizeof(addr) ) < 0 ){
pMsg = "接続要求に失敗しました。";
int i;
i = GetLastError( );
return false;
}
return( true );
}
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
たの方もおっしゃっている事ですが気になる点がいくつかあります。
1.WSAStartupの呼び出しは1度だけ。
2回以上呼び出す時はWSACleanupの後で行う。
2.WSACleanupの呼び出しが無い。
3.shutdown,closesocketの呼び出しが無い。
4.GetlastErrorはWSAGetLastErrorをラッピングしているものと考えてよいのか?
通常、TCP/IP通信のクライアント側の流れは以下のようになります。
1.初期化(WSAStartup)
2.ServerのIPアドレス解決(gethosybyname,gethostbyaddr)
3.サービスポート解決(getportbyname)
4.ソケット生成(socket)
5.接続確立(connect)
6.データ通信のループ(send,recv)
7.切断準備(shutdown)
8.切断、ソケット廃棄(closesocket)
9.WSACleanup
今回の質問の場合、2,3は直接指定しているのでOKでしょう。
7は必須ではありませんが「お行儀の良い切断」を行う為に推奨されます。
接続を複数回繰り返すのであれば2~8をループさせます。
No.4
- 回答日時:
ソケットエラーの10061は接続を拒否されたエラーだそうです。
MSDNの検索で数値をいれて検索してね。
サーバー側が同時に接続できる数を超えて繋ごうとしてるんじゃないかなー
No.3
- 回答日時:
エラーコードの示す通り、本当に接続が拒否されているのではないですか?
例えば相手方がNTWorkstationで、最大接続数を越えてるとか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ソケット通信 同じポート番号...
-
TCP/IP通信時のサーバーからの受信
-
エクセル VBA でのCOMポート...
-
TCP/IPプログラミングでのselec...
-
UdpClient 送信元のIPアドレ...
-
UDPで受信スループットを測定
-
fsockopenのソケットが全然分か...
-
recv関数でフリーズしてしまう
-
ネットワークプログラミングに...
-
UDP通信におけるbind関数について
-
Macターミナルで実行中のプログ...
-
エクセルVBA 大容量CSVファイル...
-
FOM出版の公認テキスト&問題集...
-
vb.netでバッチ処理
-
VB 電卓 メモリー機能
-
Linuxでのシリアル通信について...
-
powershell を使いカレントディ...
-
VBA:CSVファイルの読出し手法...
-
.sb3のファイルを.sb2に変換す...
-
C# シリアル通信でデータ受信...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
Socket通信の0バイト受信について
-
Winsockで接続待ちタイムアウト...
-
ソケットのクローズについて
-
UDP通信におけるbind関数について
-
VB6のwinsockでconnectできない
-
エクセル VBA でのCOMポート...
-
SIPがNATを越えられない理由
-
ソケットでクライアントのipア...
-
UdpClient 送信元のIPアドレ...
-
ソケット通信 同じポート番号...
-
VC++でのソケット通信について
-
TCP/IPプログラミングでのselec...
-
ソケット通信
-
ソケットのrecvの戻り値が0
-
UDP通信する時に、相手にどうや...
-
vxWorks6.4を使用してソケット...
-
SendRequestでヘッダが受信され...
-
ソケットを用いた1対多通信につ...
-
どうか、POSTでのファイル転送...
おすすめ情報