特爱蚂蚁
管理员
帖子
1629
精华
3
无忧币 3236
积分 1547
阅读权限 255
来自 (保密)
|
发表于:2008-6-11 15:59
找到了一个传输图片的
Introduction
The original article proposed to demonstrate elementary network programming by designing a very simple TCP client/server and a simple image viewer. The client select an image file it will send to the server. The server will save and show the image file.
The Client Mainly Code
Collapse
SOCKET_STREAM_FILE_INFO StreamFileInfo;
WIN32_FIND_DATA FindFileData;
FindClose( FindFirstFile( strFileName, &FindFileData ) );
memset( &StreamFileInfo, 0, sizeof(SOCKET_STREAM_FILE_INFO) );
strcpy( StreamFileInfo.szFileTitle, myFile.GetFileTitle() );
StreamFileInfo.dwFileAttributes = FindFileData.dwFileAttributes;
StreamFileInfo.ftCreationTime = FindFileData.ftCreationTime;
StreamFileInfo.ftLastAccessTime = FindFileData.ftLastAccessTime;
StreamFileInfo.ftLastWriteTime = FindFileData.ftLastWriteTime;
StreamFileInfo.nFileSizeHigh = FindFileData.nFileSizeHigh;
StreamFileInfo.nFileSizeLow = FindFileData.nFileSizeLow;
GetDlgItem( IDC_IPADDRESS1 )->GetWindowText( strIpAddress );
//////////////////////////////////////////////////////////////////////////
SOCKET server;
WSADATA wsaData;
int wsaret = WSAStartup( MAKEWORD(2,2), &wsaData );
if( wsaret != 0 )
{
return;
}
sockaddr_in local;
local.sin_family = AF_INET; //Address family
local.sin_addr.s_addr = inet_addr( strIpAddress ); //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;
}
connect( server,(struct sockaddr *)&local, sizeof(local));
send( server, (char *)&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO), 0 );
Sleep( 10 );
UINT dwRead=0;
char temp[1024];
while( dwRead < StreamFileInfo.nFileSizeLow )
{
memset( temp, 0, 1024 );
UINT dw = myFile.Read( temp, 1024 );
send( server, temp, dw, 0 );
dwRead += dw;
Sleep( 10 );
}
myFile.Close();
closesocket(server);
WSACleanup();
The Server Mainly Code
Collapse
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;
}
SetFileTime( (HANDLE)destFile.m_hFile,
&StreamFileInfo.ftCreationTime, &StreamFileInfo.ftLastAccessTime,
&StreamFileInfo.ftLastWriteTime );
destFile.Close();
SetFileAttributes(StreamFileInfo.szFileTitle,
StreamFileInfo.dwFileAttributes);
pThis->LoadPicture( StreamFileInfo.szFileTitle );
}
closesocket(client);
}
closesocket(server);
WSACleanup();
Load Image File
CFile file( strPictureName, CFile::modeRead );
if (file.GetLength() == 0)
{
return;
}
CArchive loadArchive( &file, CArchive::load | CArchive::bNoFlushOnDelete);
loadArchive.m_bForceFlat = FALSE;
CArchiveStream arcstream(&loadArchive);
m_spIPicture.Release();
HRESULT hr = OleLoadPicture( &arcstream, 0, FALSE, IID_IPicture,
(void**)&m_spIPicture);
loadArchive.Close();
file.Close();
|
 善用论坛论坛搜索功能会使您事半功倍 ...
建议大家发帖前先抬头看看整个论坛和板块的置顶帖了解论坛各项最新制度 ...
请选用高效的沟通方式来和大家沟通 ...同时应该具备一些提问的智慧 ...
勤劳致富,无忧币不再是难题 ... |
|