トップページ > 過去ログ > 記事閲覧
ConnectNetWork_ASyncに失敗する
名前:かぶかぶ 日時: 2012/11/21 01:45

お世話になります。 現在DXライブラリで組んだクライアントと、C(winsock)で組んだサーバーでの通信ソフトを作っています。 そこで、接続にConnectNetWork_ASyncを利用しているのですが、LANの外からのアクセスに必ず失敗します。 ためしにConnectNetWorkを利用してみたところ、正常に接続が成功しました。 動作としてはConnectNetWork_ASyncの実行後、メインループのGetNetWorkAcceptStateにて状況を確認しているのですが、 これが-1となってしまいます。 SetUseDXNetWorkProtocolにはfalseを渡しているので、これが原因かもしれません。 ご確認よろしくお願いいたします。 ※ためしにjavaで製作したサーバーでも試してみましたが、C(winsock)と同様の結果でした。

Page: 1 |

Re: ConnectNetWork_ASyncに失敗する ( No.1 )
名前:管理人 日時:2012/11/18 16:29

原因を絞り込みたいので、以下の質問にお答えいただけないでしょうか? 1.ConnectNetWork_ASync の戻り値は -1 以外の正常なハンドル値でしょうか?( 正常ならプラスの大きな値になります ) 2.ConnectNetWork_ASync 後の GetNetWorkAcceptState では最初から戻り値が -1 なのでしょうか?  それともしばらくは FALSE が返って、その後 -1、などでしょうか? 3.プログラム実行時に作成される Log.txt には接続に失敗した旨などの出力はされていますでしょうか? 4.DXライブラリのバージョンは最新のものでしょうか?
Re: ConnectNetWork_ASyncに失敗する ( No.2 )
名前:かぶかぶ 日時:2012/11/18 17:00

管理人様。ありがとうございます。 1.ConnectNetWork_ASync の戻り値は -1 以外の正常なハンドル値でしょうか? →正常な値(671154176)でした。 2.ConnectNetWork_ASync 後の →GetNetWorkAcceptState では最初から戻り値が -1 なのでしょうか? 確認したところ、直後は0で、その後-1でした。 3.プログラム実行時に作成される Log.txt には接続に失敗した旨などの出力はされていますでしょうか? →特にありません。 4.DXライブラリのバージョンは最新のものでしょうか? →最新のものを使用しています。 ============================= 質問内容に不備があったのですが、正しくは一度正常に接続した後、GetNetWorkAcceptStateが0から-1になった段階で切断される、でした。 気づいたのですが、ConnectNetWork_ASyncの返しが-1ではなく正常な値の場合、その場で接続は確立され、 GetNetWorkAcceptStateを呼ぶ必要はないのでしょうか? 上記の場合の処理を追加したところ、正常に動作しました。
Re: ConnectNetWork_ASyncに失敗する ( No.3 )
名前:管理人 日時:2012/11/18 20:00

ご返答ありがとうございます > 気づいたのですが、ConnectNetWork_ASyncの返しが-1ではなく正常な値の場合、その場で接続は確立され、 > GetNetWorkAcceptStateを呼ぶ必要はないのでしょうか? いえ、ConnectNetWork_ASync は非同期接続なので、ConnectNetWork と違い関数から出た時点では 相手との接続は確立していません、なので ConnectNetWork_ASync の直後の GetNetWorkAcceptState の 戻り値は 0( 接続されていない )なのです > 上記の場合の処理を追加したところ、正常に動作しました。 つまり現在は ConnectNetWork_ASync で正常に接続できているということでしょうか? もしそうでしたらどのような処理を追加することで解決できたのでしょうか?
Re: ConnectNetWork_ASyncに失敗する ( No.4 )
名前:かぶかぶ 日時:2012/11/20 03:04

返信が遅れました。 対応ですが、ConnectNetWork_ASyncの返すハンドルが正常な値だった場合、 接続済みとしてGetNetWorkAcceptStateを呼ぶ処理をはずしました。 ConnectNetWork_ASyncを行った時点でサーバー側では接続が確立されていたためです。 上記の対策を行わない場合、GetNetWorkAcceptStateが最初は0、次に-1を返して切断されました。 ただサーバーをクライアントと同一PCに持ってきた場合、問題なく動作しました。 そのため、サーバーPCのセキュリティの問題かと思ったのですが、 通常のConnectNetWorkの場合正常に確立されるようで、いまいち原因がわからず・・・です。 ======================= int networkHandle= ConnectNetWork_ASync(ipdata, port) while(!ProcessMessage()) { int res = GetNetWorkAcceptState(handle ); if(res == 1) { printfDx("success\n"); } else if (res == -1) { printfDx("faled\n"); } } =======================
Re: ConnectNetWork_ASyncに失敗する ( No.5 )
名前:かぶかぶ 日時:2012/11/20 03:06

■追記 GetNetWorkAcceptStateを呼ばない場合、切断されることはないようです。
Re: ConnectNetWork_ASyncに失敗する ( No.6 )
名前:管理人 日時:2012/11/21 00:53

ご返答ありがとうございます GetNetWorkAcceptState の呼び出しをしなければ接続が確立して、且つ継続するというご情報で原因が判明しました 非同期接続を開始した後、接続が確立していない状態で GetNetWorkAcceptState を呼ぶと ネットワークハンドルが解放されてしまうというバグがありました orz 修正したバージョンをアップしましたので、よろしければお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: ConnectNetWork_ASyncに失敗する ( No.7 )
名前:かぶかぶ 日時:2012/11/21 01:44

ご回答および調査ありがとうございます。 いただいたライブラリを導入したところ、正常に動作することを確認しました! お忙しい中、迅速な対応を行っていただき、本当にありがとうございます。 これからもよろしくお願いいたします。
Re: ConnectNetWork_ASyncに失敗する ( No.8 )
名前:かぶかぶ(解決) 日時:2012/11/21 01:46

名前で解決記載するのですね・・・。

Page: 1 |