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
名前で解決記載するのですね・・・。
|