はじめまして,モンペチと申します.
通信対戦ゲームを作っているのですが,自分のアイコンを相手に表示してもらうために,画像データを送信し合って,受信したデータから画像ハンドルを作成したいと思っています.
以下のようなプログラムを用いて,同一PCでの重複起動により通信をすると MyIcon.jpg と test.jpg は同じ画像になるはずなのですが,バイナリエディタで中身を見たところ,サイズは等しいのですがデータがでたらめなものになっていました.
関係ないとは思いますが,SetUseDXNetWorkProtocol(FALSE); として,DxLibの通信形態は使用しておりません.
どなたか,おわかりいただけるようならご教授の程お願いします.
void ChangeIcon()
{
FILE *fp;
int i;
int MySize, YourSize;
unsigned char *MyData, *YourData;
fp = fopen("MyIcon.jpg", "rb");
fseek(fp, 0L, SEEK_END);
MySize = ftell(fp);
fseek(fp, 0L, SEEK_SET);
MyData = (unsigned char *)malloc(MySize);
fread(MyData, MySize, 1, fp);
fclose(fp);
/***** ファイルのサイズを教え合う *****/
NetWorkSend(NetHandle, &MySize, sizeof(int));
while(!ProcessMessage() && GetNetWorkDataLength(NetHandle) <= 0)
WaitTimer(100);
NetWorkRecv(NetHandle, &YourSize, sizeof(int));
/**************************************/
YourData = (unsigned char *)malloc(YourSize);
/********** ファイルの送受信 **********/
NetWorkSend(NetHandle, &MyData, MySize);
while(!ProcessMessage() && GetNetWorkDataLength(NetHandle) <= 0)
WaitTimer(100);
NetWorkRecv(NetHandle, YourData, YourSize);
/**************************************/
YourIcon = CreateGraphFromMem(YourData, YourSize);
if(host == SERVER)
{
if((fp = fopen("test.jpg", "wb")) != NULL)
fwrite(&YourData, YourSize, 1, fp);
fclose(fp);
}
free(MyData);
free(YourData);
}