NetWorkRecv()で受信した文字列の末尾が"フフフフ"になる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
山崎

NetWorkRecv()で受信した文字列の末尾が"フフフフ"になる

#1

投稿記事 by 山崎 » 15年前

いつもお世話になっております、山崎です。
今回は、NetWorkRecv()でバッファから取り出した文字列が
"フフフフフフフフ"
になってしまう件について伺いに参りました。

OSはXP、DXライブラリにVisualStudio2010を使っております。

ただ今通信部分を作っております。デバッグモードで作業しています。
通信のテストとして、接続相手に毎フレーム データを送信しあう、
というプログラムを作っています。
毎フレームでカウンタの値を+1し、その値を文字列として送信します。

しかしその受信したデータを表示すると、
受け取ったデータの先頭にはきちんと相手から送られたカウンタの値があるのですが、
それ以降が"フフフフフフ..."となってしまいます。
送信したデータは、"フフフフフフ..."となっていません。
以下が、そのデータの受信と送信を担う部分のコードです。
なお、接続する側もされる側も、以下のコードで動いております。
//データを受信して、その文字列の先頭を指すポインタを返す
char* CommunicationManager::GetReceiveData(int HandleListIndex)
{
    char Buffer[256];
    int DataLength=GetNetWorkDataLength(NetHandleList[HandleListIndex]);
    NetWorkRecv(NetHandleList[HandleListIndex],Buffer,DataLength);
    
    printfDx("受信データ表示 ReceiveData= [%s]\n",Buffer);

    return Buffer;
}

//データを送信する
void CommunicationManager::SendData(char* Data,int HandleListIndex)
{
    NetWorkSend(NetHandleList[HandleListIndex],Data,strlen(Data));
    printfDx("送信データ表示 Data= [%s]\n",Data);
}

//この関数を毎フレーム実行する
void CommunicationManager::CommunicationManagerMain()
{

    char SendDataTemp[256];
    sprintf(SendDataTemp,"%d",ServerTime);
    SendData(SendDataTemp,0);

    char* ReceiveData=GetReceiveData(0);

    ServerTime++;
    if(SERVER_COUNT_MAX<=ServerTime)
        ServerTime=0;
}
ブレークポイントで処理を中断して、受信したデータを見てみると、
送信したときにはあったはずの終端文字が受信したデータには無くなっているようでした。
NetWorkRecv()で受信した文字列からは自動で終端文字が無くなる、という仕様ではないですよね…?

どのようにすれば
受信した文字列の末尾に"フフフフフフフ"がないデータを受け取れるのでしょうか。

つうこうにん

Re:NetWorkRecv()で受信した文字列の末尾が

#2

投稿記事 by つうこうにん » 15年前

NetWorkSend(NetHandleList[HandleListIndex],Data,strlen(Data));

ここの最後の引数はバイト数だとすれば
strlen(Data)+1
じゃないでしょうか

山崎

Re:NetWorkRecv()で受信した文字列の末尾が

#3

投稿記事 by 山崎 » 15年前

つうこうにん様
strlen(Data)+1 にしたところ、一瞬にして解決いたしました。
どうもありがとうございました。

…こんなことに気づかなかったなんてお恥ずかしい限りです。
まだまだ精進せねば…。

閉鎖

“C言語何でも質問掲示板” へ戻る