
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#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
-
4
ソケットのクローズについて
C言語・C++・C#
-
5
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
6
ソケット通信で同時受信の制限?
C言語・C++・C#
-
7
ネットワーク切断を検出するには?
C言語・C++・C#
-
8
Cstring(日本語含む)をcharに変換したいのですが
C言語・C++・C#
-
9
WinSockでの通信プログラムがうまくいきません
C言語・C++・C#
-
10
TCP/IP のパケットの分断と結合について
UNIX・Linux
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
【C#】Page_Loadさせない方法に...
-
IF文に時間(何時から何時ま...
-
途中で処理を中断させたい (ア...
-
特定の名前のオートシェイプの...
-
Excel VBA セルの名前があるか...
-
マクロで、次のコードへ行く前...
-
どう増強すべきか
-
Functionで戻り値を複数返す方法
-
エクセル VBAで複数セル選択時...
-
vbaのエラー対応(実行時エラー...
-
どうやってもFor文を抜けてしま...
-
StatusStripの表示が更新されな...
-
ExcelのVBAで、選択したファイ...
-
分数の分母ゼロ問題
-
シグナル 6(SIGABRT)とは?
-
RaiseEventのメリット
-
LoadPicture のオートメーショ...
-
【Vb.net】プリンタジョブの取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
vbaのエラー対応(実行時エラー...
-
シグナル 6(SIGABRT)とは?
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
Excel VBA セルの名前があるか...
-
どう増強すべきか
-
特定の名前のオートシェイプの...
-
途中で処理を中断させたい (ア...
-
特定のファイルを他のプロセス...
-
順番に処理させたい
-
Word VBA。各マクロの間に待ち...
-
StatusStripの表示が更新されな...
-
ドリブン??
-
ExcelのVBAで、選択したファイ...
-
RaiseEventのメリット
-
【VBA】エラー処理で別プロシー...
-
エクセルVBAでロックをかけたい
-
どうやってもFor文を抜けてしま...
おすすめ情報