this is server
#pragma once
#include <WINSOCK2.H>
#pragma comment(lib,"Ws2_32.lib")
#define PORT 8001
#define IP "127.0.0.1"
#define SINGEL_SEND "single_send"
class CSock
{
private:
SOCKET Sock_Server;
SOCKET Sock_Client;
WSADATA Wsa;
SOCKADDR_IN AddrServer;
SOCKADDR_IN AddrClient;
int LenOfAddrClient ;
int sendTotal;
int sendThisTime;
char buff[20];
public:
bool senddata(char * data , int nsize);
bool sockini();
void recvData( char *data , int nsize ) ;
bool recvFlag();
CSock(void);
~CSock(void);
};
#include "Sock.h"
CSock::CSock(void)
{
}
CSock::~CSock(void)
{
closesocket(Sock_Server);
WSACleanup() ;
}
bool CSock::senddata(char * data , int nsize)
{
sendTotal = 0 ;
sendThisTime = 0 ;
while ( sendTotal < nsize )
{
sendThisTime = send( Sock_Client , data + sendTotal , nsize - sendTotal , 0 );
sendTotal += sendThisTime ;
if (sendThisTime < 0 )
{
return false;
}
}
return true ;
}
void CSock::recvData( char *data , int nsize )
{
sendTotal = 0 ;
sendThisTime = 0 ;
while ( sendTotal < nsize )
{
sendThisTime = recv( Sock_Client , data+sendTotal , nsize - sendTotal , 0 );
sendTotal += sendThisTime ;
}
}
bool CSock::recvFlag()
{
memset( (void*)buff , 0 , strlen( SINGEL_SEND ) );
recvData( buff , strlen(SINGEL_SEND));
if ( memcmp( (void*)buff , SINGEL_SEND , strlen(SINGEL_SEND) ) == 0 )
{
return true ;
}
return false ;
}
bool CSock::sockini()
{
if (WSAStartup( MAKEWORD(2,2),&Wsa ))
{
return false;
}
Sock_Server = socket( AF_INET , SOCK_STREAM , 0 );
if ( Sock_Server == INVALID_SOCKET )
{
WSACleanup();
return false ;
}
AddrServer.sin_family = AF_INET ;
AddrServer.sin_port = htons( PORT );
AddrServer.sin_addr.S_un.S_addr = inet_addr( IP );
if ( bind( Sock_Server , (SOCKADDR*)&AddrServer , sizeof(AddrServer) ) )
{
closesocket( Sock_Server );
WSACleanup();
return false ;
}
if ( listen( Sock_Server , 5 ) )
{
WSACleanup() ;
return false;
}
LenOfAddrClient = sizeof(AddrClient);
Sock_Client = accept( Sock_Server , (SOCKADDR*)&AddrClient , &LenOfAddrClient );
return true;
}
#include <iostream>
#include "Sock.h"
#include <WINSOCK2.H>
#pragma comment(lib,"Ws2_32.lib")
#define SINGEL_SEND "single_send"
using namespace std;
char buff[20];
typedef struct bmpheader
{
int indexBitmap; int x , y ; int nLength ; int nSum ; int nDisplay ;
}BMPHEADER , *pBMPHEADER;
typedef struct bitinfo
{
int bitWidth; int bitHeight; int bitCount; int bitSize; }BITINFO,*PBITINFO;
int main(int argc, char* argv[])
{
CSock socks;
if(socks.sockini() == 0 )
{
cout<<"初始服务端失败!";
}
BITINFO bit;
bit.bitCount = 24 ;
bit.bitHeight = 1366 ;
bit.bitWidth = 768 ;
bit.bitSize = 255 ;
BMPHEADER bmp;
ZeroMemory( (void*)&bmp , sizeof(BMPHEADER) );
while (1)
{
bmp.indexBitmap++;
bmp.nLength = sizeof(BMPHEADER);
socks.recvFlag() ;
bmp.nDisplay = 1 ;
socks.senddata((char*)&bmp , sizeof(BMPHEADER) ) ;
}
return 0;
}
Send data when the memory is increasing, do not know why
[EDIT: Copied text posted as solution]
i found no problem in my program , but i dont know why it cost me about 4M memory
[/EDIT]