Click here to Skip to main content
15,891,777 members

Comments by rmds (Top 30 by date)

rmds 1-Feb-19 5:47am View    
Here's the snippet:

SERVER SIDE:

command_header.command = SEND_FILE;
command_header.iDataBuffer = findfile.cFileName;
int nfRet = SockConnection.Send((char*)&command_header.command,
sizeof(command_header.command));
size_t iDataLen = command_header.iDataBuffer.GetLength() * sizeof(TCHAR);
nfRet = SockConnection.Send((char*)command_header.iDataBuffer.GetBuffer(),iDataLen);
switch(command_header.command) {
case SEND_FILE: {
CFile Sourcefile;
Sourcefile.Open(Filepath, CFile::modeRead);
ULONGLONG dwLength = Sourcefile.GetLength();
command_header.DataBuffer = new char[(int)dwLength + 1];
UINT nActual = Sourcefile.Read(command_header.DataBuffer,dwLength);
command_header.DataBuffer[nActual] = 0;
nfRet = SockConnection.Send(command_header.DataBuffer, nActual);

CLIENT SIDE:
COMMAND_HEADER hCommand_header;
CFile Destfile;
char nBuf[1000];
int nRet = SockConnection.Receive((char*)&hCommand_header.command,
sizeof(hCommand_header.command));
nRet = SockConnection.Receive((char*)hCommand_header.iDataBuffer.GetBuffer(50),
50*sizeof(TCHAR));
hCommand_header.iDataBuffer.ReleaseBuffer(nRet/sizeof(TCHAR));

here: hCommand_header.iDataBuffer still has junk that was not the case in CREATE_FILE command.
rmds 1-Feb-19 5:33am View    
Could you please lemme know how you comeup with the calculation of GetBuffer() and ReleaseBuffer()? This is pure mastermind!!! and it worked for CREATE_FILE Command. But, wen I'm changing command to SEND_FILE, hCommand_header.iDataBuffer still has garbage values. thank you very much
rmds 31-Jan-19 7:44am View    
I hate to trouble but been checking for quite a while now... A txtfile with the name is created, however the above code crashes with error dialog"Heap Corruption Detected: after Normal block. "CRT detected that the application wrote to memory end of heap buffer". It crashes when I press F10 after "DestFile.Open" in following code:

switch(hCommand_header.command) {
case CREATE_FILE: {
nRet = SockConnection.Receive((char*)hCommand_header.iDataBuffer.GetBuffer(),50);
(hCommand_header.iDataBuffer.GetBuffer())[nRet] = '\0';
Destfile.Open(hCommand_header.iDataBuffer, CFile::modeCreate | CFile::modeWrite);
}
hCommand_header.iDataBuffer.ReleaseBuffer();
break;
rmds 31-Jan-19 5:14am View    
I got it. It worked! Thank you very much!!!
rmds 31-Jan-19 5:04am View    
OK...instead this code reads the filename but along with the garbage value:
int nRet = SockConnection.Receive((char*)&hCommand_header.command,
sizeof(hCommand_header.command));

switch(hCommand_header.command) {
case CREATE_FILE: {
nRet = SockConnection.Receive((char*)hCommand_header.iDataBuffer.GetBuffer(), 50);
}
break;

how to get rid of the garbage and unpack the filename to CString?