ある PC から別の PC にファイルを送信するプログラムを作成しています。を使用して送信しようとしていますchar* buffer
が、問題が発生しています。バッファを送信すると思いますが、結果はサイズが0キロバイトのファイルです。バッファをファイルに書き込んでいないのではないかと思いますが、確かなことはわかりません。私のバッファ データは *bmp ファイルからのものです。ここでほぼ同じことについて別の質問を見つけましたが、もっと説明が必要です。
私は C++ Builder 2010 を使用していますが、そのチュートリアルを見つけるのは困難です。便利なさまざまなコンポーネントと機能があります。
コード:
クライアント:
void __fastcall TForm1::TcpServer1Accept(TObject *Sender,
TCustomIpClient *ClientSocket)
{
char *buffer;
TcpServer1->ReceiveBuf(buffer, sizeof(buffer), 0);
CreateFile(buffer); //function that creates a file from the buffer
//Drawing my bmp on the form
Slide->LoadFromFile("ScreenShotBorland.bmp");
Image1->Canvas->Draw(0, 0, Slide);
free(buffer);
}
void CreateFile(char *buffer)
{
FILE *fp = NULL;
fp = fopen("teste.bmp", "wb");
if (fp == NULL) {
MessageBox(NULL, "ERRO!", "Error", MB_OK | MB_ICONERROR);
}
fwrite(buffer, 1, sizeof(buffer), fp);
free(buffer);
fclose(fp);
}
サーバー:
void __fastcall TForm1::TcpClient1Connect(TObject *Sender)
{
//Open a file to load the buffer
long lSize;
char *buffer;
size_t result;
FILE *pf2 = fopen("teste.bmp", "rb");
if (pf2 == NULL) {
MessageBox(NULL, "ERRO!", "Error", MB_OK | MB_ICONERROR);
}
fseek(pf2, 0, SEEK_END);
lSize = ftell(pf2);
rewind(pf2);
//allocate the buffer in memorie
buffer = (char*) malloc(sizeof(char) * lSize);
if (buffer == NULL)
MessageBox(NULL, "ERRO!", "Error", MB_OK | MB_ICONERROR);
result = fread(buffer, 1, lSize, pf2);
if (result != lSize)
MessageBox(NULL, "ERRO!!!", "Error", MB_OK | MB_ICONERROR);
//Transferring the file
if (TcpClient1->Active)
TcpClient1->SendBuf(buffer, sizeof(buffer), 0);
free(buffer);
fclose(pf2);
}