複数の画像の連続したソケットストリームからビットマップ画像を分離して表示するにはどうすればよいですか?以下のコードは、受信したbmpが1つしかない場合に、1つの画像を保存して表示します。ソケットストリームに複数のビットマップ画像が含まれている場合(例:BM .... BM .... BM ...)、画像を分離して表示するにはどうすればよいですか?
DWORD WINAPI CServerDlg::ThreadSocket( LPVOID lpParam )
{
CServerDlg *pThis = (CServerDlg *)lpParam;
SOCKET server;
WSADATA wsaData;
int wsaret = WSAStartup( MAKEWORD(2,2), &wsaData );
if( wsaret != 0 )
{
return 0;
}
sockaddr_in local;
local.sin_family = AF_INET; //Address family
local.sin_addr.s_addr = INADDR_ANY; //Wild card IP address
local.sin_port = htons((u_short)8888); //port to use
server = socket( AF_INET, SOCK_STREAM, 0 );
if( server == INVALID_SOCKET )
{
return 0;
}
if( bind( server, (sockaddr*)&local, sizeof(local) ) != 0 )
{
return 0;
}
if( listen( server, 10 ) != 0 )
{
return 0;
}
SOCKET_STREAM_FILE_INFO StreamFileInfo;
memset( &StreamFileInfo, 0, sizeof(SOCKET_STREAM_FILE_INFO) );
SOCKET client;
sockaddr_in from;
int fromlen = sizeof( from );
while( pThis->m_bListen )
{
char temp[1024];
memset( temp, 0, 1024 );
client = accept( server, (struct sockaddr*)&from, &fromlen );
int iLen = recv( client, temp, sizeof(SOCKET_STREAM_FILE_INFO), 0 );
if( iLen == sizeof(StreamFileInfo) )
{
memcpy( &StreamFileInfo, temp, sizeof(StreamFileInfo) );
CFile destFile( StreamFileInfo.szFileTitle, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
UINT dwRead = 0;
while( dwRead < StreamFileInfo.nFileSizeLow )
{
memset(temp,0,1024);
UINT dw = recv( client, temp, 1024, 0 );
destFile.Write(temp, dw);
dwRead += dw;
}
destFile.Close();
pThis->LoadPicture( StreamFileInfo.szFileTitle ); // Display image in a dialog box
}
closesocket(client);
}
closesocket(server);
WSACleanup();
return 0;
}