質問させていただきます。
連続してデータを受信する際、
NetWorkRecv()で指定する格納先をmalloc()で確保したアドレスにすると、
それ以降のGetNetWorkDataLength()で正しく値を取得できず、続くデータを受信できません。
// 送信側 ===================================================
int sendData[3] = { 0, 1, 2 };
// 通信を確立
IPDATA ip;
int port;
int netHandle;
ip.dall = *;
port = *;
netHandle = ConnectNetWork( ip, port );
// 確立が成功した場合のみ中の処理をする
if( netHandle != -1 )
{
// データ送信
for( int i=0; i<3; i++ )
NetWorkSend( netHandle, &sendData[i], sizeof(sendData[i]) );
// キー入力待ち
WaitKey();
// 接続を断つ
CloseNetWork( netHandle );
}
// 受信側 ===================================================
int recvData[3];
int port;
int netHandle;
port = *;
// 接続待ち
PreparationListenNetWork( port ) ;
while( !ProcessMessage() )
{
// 新しい接続があったらそのネットワークハンドルを得る
netHandle = GetNewAcceptNetWork();
if( netHandle != -1 ){
// 接続の受付を終了する
StopListenNetWork();
break;
}
}
// 受信
for( int i=0; i<3; i++ ){
// 取得していない受信データ量を得る
int dataLength = GetNetWorkDataLength( netHandle ) ;
// 受信完了
if( dataLength != 0 ){
int* temp = (int*)malloc(dataLength);
NetWorkRecv( netHandle, temp, dataLength );
recvData[i] = *(int*)temp;
}
// 受信中
else{
i--;
continue;
}
}
// キー入力待ち
WaitKey() ;
// 接続を断つ
CloseNetWork( netHandle )
;
// 以上 ====================================================
// 受信完了
if( dataLength != 0 ){
int* temp = (int*)malloc(dataLength);
NetWorkRecv( netHandle, temp, dataLength );
recvData[i] = *(int*)temp;
}
上記部分を
// 受信完了
if( dataLength != 0 ){
NetWorkRecv( netHandle, &recvData[i], dataLength );
}
このようにすると正常に動作します。
関数を間違って使用していたら指摘をおねがいします。