
今私はVisual Studio2010 C++で
ソケット通信のプログラムをしているのですが、
クライアントから送ってくる文字をうまく受信できません。
接続は出来ています。
_beginthreadexでスレッドを作っています。
以下が受信の処理のスレッドになっています。
unsigned int __stdcall ThSend(void* pArg)
{
CSocket_ServerDlg* pDlg = (CSocket_ServerDlg*)pArg;
while(1){
char buf[256];/* 受信するバッファ */
int buf_len;/* 受信したバイト数 */
buf_len = recv(pDlg->m_NewSoc,buf , RECVSIZE - 1, 0);
if (buf_len != SOCKET_ERROR ){
buf[buf_len] = '\0';/* 受信したバッファの後ろにNULLを付加する */
}
pDlg->m_xvEditResult += _T("Recv : ");
pDlg->m_xvEditResult += buf;
pDlg->m_xvEditResult += _T("\r\n");
}
return 0;
}
"m_"はメンバ変数です。
以下がスレッド作成のソースになっています
HANDLE hForth;
unsigned int nForthID;
hForth = (HANDLE)_beginthreadex(NULL, 0, ThSend , this, 0, &nForthID );
なぜ受信できないのか分からない状態です。
ではよろしくお願いします
No.1ベストアンサー
- 回答日時:
ソケットは、"ブロッキング モード" と "非ブロッキング モード" があったと思います。
現在、非ブロッキング モードになっていないのではないでしょうか?
それから、詳しく覚えてはいませんが、Windowsのソケット関数の仕様は、Unixx等のソケット関数と違っていたと思います。
「ソケットの一般的な仕様はこうである。そしてスレッドの仕様はこうである。だから、動作するはずである。」
と思ってプログラムを作ると、Windowsの場合、まともに動作しない可能性があります。
なので、私は、Unix上では、ソケットのプログラムをマルチスレッドで作成しても、相手となるプログラムがWindows上で作成する場合、マルチスレッドでは、作りませんでした。
まあ、マルチスレッドにすれば、プログラムが簡単になる面はありますが、動作しなかった場合の原因究明とうまく修正する自信が無かっただけなんですが・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グーグルの障害者訓練プログラ...
-
三菱製PLC:ファイルレジスタ(...
-
プログラム修正の際に古いソー...
-
テストについて
-
三菱シーケンサーA1SHCPUとA1SJ...
-
ナショナル NE-1401F の業...
-
Zと2とか紛らわしいのがあるか...
-
PostgreSQL+DataGridView
-
納品 vs ご納品 どちらが正し...
-
営業職をやってます。先月発注...
-
access 今月のデータを抽出するVBA
-
印刷会社がミスプリント。その...
-
texに関する初歩的な質問
-
JUnit結果出力をファイルに書き...
-
formで送信したPOSTデータの削...
-
長さ0の文字列を格納できません...
-
発注書と見積書の品番が異なっ...
-
契約期間内における値上げ等に...
-
納入日と納品日について
-
スーパーなどで今時期ドリンク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Zと2とか紛らわしいのがあるか...
-
グーグルの障害者訓練プログラ...
-
三菱製PLC:ファイルレジスタ(...
-
テストについて
-
インプットとアウトプット
-
三菱シーケンサーA1SHCPUとA1SJ...
-
プログラムソースの値段
-
オーバレイ方式と仮想記憶シス...
-
東京でヨコイのソース買えますか?
-
マクロ
-
エントリーシート
-
発注してないのにシステム改修...
-
おすすめのプログラム開発の入...
-
プログラムコードの読解力の鍛え方
-
プログラム修正の際に古いソー...
-
オブジェクト指向でないプログ...
-
初心者です。プログラムを作り...
-
プログラムを作ってもらう費用
-
HPのTOPページによくあるTOPIX...
-
パソコンをたちあげるとへんな...
おすすめ情報