|
分類:[C/C++]
いつもお世話になっております。
タイトルにもありますがVC++6.0MFCにてCSocketクラスの派生で TCPクライアント側クラスを作り、それでソケット通信プログラムを 作成しているのですが、サーバー側(既製のFA装置)と接続ができたり、 失敗したりしてしまいます。現象としては…
・初回はほぼ確実に接続できる。しかし切断&プログラム終了後に 再度プログラム開始&接続しようとすると失敗する。 pingコマンドは問題なく成功。
・上記の状態はしばらく(5〜8分程度)待つと再接続できる。
・LANコネクタが1つのパソコンの場合、CSocketクラスで 引数なし(ローカルIP指定せず)でCreateメソッドを 実行後にConnect(接続処理)をすると確実に成功する。
・LANコネクタが複数のパソコンの場合はローカルIPを指定しないと Createメソッド実行後にConnect(接続処理)が失敗してしまう。
====ソースプログラム(接続部のみ抜粋)===== //LPCTSTR p_pszLocalAddress :ローカルIPアドレス(自機側使用LANコネクタ設定値) //LPCTSTR p_pszConectAddress :ホストIPアドレス(接続先) //UINT p_nPortNo :通信ポート番号 // BOOL CClientSocket::OpenClient( LPCTSTR p_pszLocalAddress, LPCTSTR p_pszConectAddress, UINT p_nPortNo ) { CString strSocketAddress= _TEXT(""); UINT nSocketPort = 0; BOOL bRet = GetSockName( strSocketAddress, nSocketPort ) && !strSocketAddress.IsEmpty() && nSocketPort != 0;
//接続中? if( !bRet ) { //生成&接続 bRet = Create( p_nPortNo, SOCK_STREAM, p_pszLocalAddress ) && Connect( p_pszConectAddress, p_nPortNo ); } return bRet; }
OSはWindowsXPです。
上記で何かマズい処理であれば教えてください。
または複数LANコネクタを持ったパソコンでTCPクライアントソケット通信が できるのであれば、ローカルIPを指定するのは特に拘っておりませんので、 他に何か良い方法があれば教えてください。
|