
winsockで双方向通信のため、非同期処理を行っているのですが、うまくいきません。
クライアント側で、WSAAsyncSelectの処理の後、Connectを呼んでいるのですが、Connectでエラーメッセージを返します。(エラーナンバー: 10035)
サーバ側はaccept処理はうまくいっているのですが、accept後うまく処理を返していないためだと思うのですが...
で質問は、
1.クライアント側、サーバ側にそれぞれ、WSAAsyncSelect
を記載しても問題ないか? クライアント側はConnect前で宣言。 サーバ側はbind前で宣言しています。
2.エラー番号10035は非ブロッキングモードで処理されないためにおきています。 Connectで非ブロッキングモード処理がされていないためだと思うのですが、他に記述しないといけない関数があるのでしょうか?
クライアント側:
// 非同期処理
if(WSAAsyncSelect(client_s,this->m_hWnd, FM_TCPPROC, FD_CONNECT | FD_READ | FD_WRITE | FD_CLOSE) == SOCKET_ERROR){
return FALSE;
}
// コネクト処理
memset(&client,0,sizeof(client));
client.sin_family = AF_INET;
client.sin_addr.s_addr = inet_addr(IpAddress);
client.sin_port = htons(PORT_NO);
if(connect(client_s, (LPSOCKADDR)&client, sizeof(client)) == SOCKET_ERROR){ <-- ここでエラー
long ErrNum = WSAGetLastError(); <-- ここでエラーNoがかえる。
return FALSE;
}else{
NetFlg = true;
}
お分かりになる方教えてくださいませ。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
補足です
ちなみに poposan さんの プログラムの場合
this->m_hWndにFM_TCPPROCメッセージが飛びます
メッセージを拾い、connectに対する処理を書けばよろしいと思います
// サンプルコード ------------
LRESULT CXxxx::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case FM_TCPPROC:
nEventCode = WSAGETSELECTEVENT(lParam);
nErrorCode = WSAGETSELECTERROR(lParam);
switch(nEventCode)
{
case FD_CONNECT:
// nErrorCode は connectの戻り値
// ここでエラー処理など
break;
}
break;
}
return CWnd::WindowProc(message, wParam, lParam);
}
ありがとうございました。
connectの後すぐエラー処理をしていたので、それで問題があったのですね。
Connect関数を読んだあとは、WindowProcの処理をしてしまうのですね。
双方向通信を作成しているので、WindowProcの処理方法を勉強しないといけませんね。
No.1
- 回答日時:
WSAAsyncSelectを使用して非同期にしているので、ブロッ
キングするような関数(この場合はconnect)がすぐに制御
を返し、WSAEWOULDBLOCK(エラーナンバー: 10035)を返すのは正しい動作です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Winsockで接続待ちタイムアウトを設定する方法
C言語・C++・C#
-
Connectエラーが出てしまう・・・。
C言語・C++・C#
-
ソケットのクローズについて
C言語・C++・C#
-
-
4
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
5
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
6
ネットワーク切断を検出するには?
C言語・C++・C#
-
7
ソケット通信で同時受信の制限?
C言語・C++・C#
-
8
Cstring(日本語含む)をcharに変換したいのですが
C言語・C++・C#
-
9
TCP/IP のパケットの分断と結合について
UNIX・Linux
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA Vlookup #N/A表示させない方法
-
特定の名前のオートシェイプの...
-
Vba 互換モードでのAppActiveに...
-
IF文に時間(何時から何時ま...
-
Excel VBA セルの名前があるか...
-
ListViewから選択中の文字列を取得
-
【C#/Java?】try-catchでcatch...
-
どう増強すべきか
-
C# Webブラウザコントロールの...
-
マクロで、次のコードへ行く前...
-
エクセルVBAのChangeイベント時...
-
“try/catch”と“if/else”
-
ipodのメールをpcで処理?
-
シートモジュールを複数作成す...
-
バイナリ送信で出るエラーコー...
-
エクセルVBAでロックをかけたい
-
サブリミナルプログラムを作成...
-
¥マークを含むパスの処理につ...
-
特定のファイルを他のプロセス...
-
バッチ処理って何?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
vbaのエラー対応(実行時エラー...
-
シグナル 6(SIGABRT)とは?
-
どう増強すべきか
-
private subモジュールを他のモ...
-
IF文に時間(何時から何時ま...
-
特定の名前のオートシェイプの...
-
Excel VBA セルの名前があるか...
-
マクロで、次のコードへ行く前...
-
ExcelのVBAで、選択したファイ...
-
特定のファイルを他のプロセス...
-
VB6にてネットワーク上にある共...
-
どうやってもFor文を抜けてしま...
-
Word VBA。各マクロの間に待ち...
-
エクセル VBAで複数セル選択時...
-
【VBA】エラー処理で別プロシー...
-
フォルダのアクセス権確認について
-
VBA For Each 〜 複数条件について
-
StatusStripの表示が更新されな...
-
【C#】Page_Loadさせない方法に...
おすすめ情報