dポイントプレゼントキャンペーン実施中!

今私は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 );

なぜ受信できないのか分からない状態です。
ではよろしくお願いします

A 回答 (1件)

ソケットは、"ブロッキング モード" と "非ブロッキング モード" があったと思います。


現在、非ブロッキング モードになっていないのではないでしょうか?

それから、詳しく覚えてはいませんが、Windowsのソケット関数の仕様は、Unixx等のソケット関数と違っていたと思います。
「ソケットの一般的な仕様はこうである。そしてスレッドの仕様はこうである。だから、動作するはずである。」
と思ってプログラムを作ると、Windowsの場合、まともに動作しない可能性があります。
なので、私は、Unix上では、ソケットのプログラムをマルチスレッドで作成しても、相手となるプログラムがWindows上で作成する場合、マルチスレッドでは、作りませんでした。
まあ、マルチスレッドにすれば、プログラムが簡単になる面はありますが、動作しなかった場合の原因究明とうまく修正する自信が無かっただけなんですが・・・。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!