现在的位置: 首页 > 综合 > 正文

关于VC网络编程中用 char 发送结构体的说明

2013年10月11日 ⁄ 综合 ⁄ 共 2674字 ⁄ 字号 评论关闭

关于VC网络编程中用 char 发送结构体的说明
    在VC中要发送struct的程序,如果需要中间打包的话,首先因该将结构体转换为字节型的。然后再用
send (SOCKET s,const char FAR * buf,int len,int flags)发送。
这里要注意的是buf可以包含\0字符,而且len必须正确。
包含有\0字符的struct中间过程转换成char可能会有问题。
这里是一个字符转换的CLASS

// Buffer.cpp: implementation of the CBuffer class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Buffer.h"
#include "Math.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif



//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
//
// FUNCTION:    CBuffer
//
// DESCRIPTION:    Constructs the buffer with a default size
//
// RETURNS:       
//
// NOTES:   
//
// MODIFICATIONS:
//
// Name                Date        Version        Comments
// N T ALMOND       270400        1.0            Origin
//
////////////////////////////////////////////////////////////////////////////////
CBuffer::CBuffer()
{
    // Initial size
    m_nSize = 0;

    m_pPtr = m_pBase = NULL;
}

////////////////////////////////////////////////////////////////////////////////
//
// FUNCTION:    ~CBuffer
//
// DESCRIPTION:    Deallocates the buffer
//
// RETURNS:       
//
// NOTES:   
//
// MODIFICATIONS:
//
// Name                Date        Version        Comments
// N T ALMOND       270400        1.0            Origin
//
////////////////////////////////////////////////////////////////////////////////
CBuffer::~CBuffer()
{
    if (m_pBase)
        VirtualFree(m_pBase,0,MEM_RELEASE);
}
   

////////////////////////////////////////////////////////////////////////////////
//
// FUNCTION:    Write
//
// DESCRIPTION:    Writes data into the buffer
//
// RETURNS:       
//
// NOTES:   
//
// MODIFICATIONS:
//
// Name                Date        Version        Comments
// N T ALMOND       270400        1.0            Origin
//
////////////////////////////////////////////////////////////////////////////////
BOOL CBuffer::Write(PBYTE pData, UINT nSize)
{
    ReAllocateBuffer(nSize + GetBufferLen());

    CopyMemory(m_pPtr,pData,nSize);

    // Advance Pointer
    m_pPtr+=nSize;

    return nSize;
}

////////////////////////////////////////////////////////////////////////////////
//
// FUNCTION:    Insert
//
// DESCRIPTION:    Insert data into the buffer
//
// RETURNS:       
//
// NOTES:   
//
// MODIFICATIONS:
//
// Name                Date        Version        Comments
// N T ALMOND       270400        1.0            Origin
//
////////////////////////////////////////////////////////////////////////////////
BOOL CBuffer::Insert(PBYTE pData, UINT nSize)
{
    ReAllocateBuffer(nSize + GetBufferLen());

    MoveMemory(m_pBase+nSize,m_pBase,GetMemSize() - nSize);
    CopyMemory(m_pBase,pData,nSize);

    // Advance Pointer
    m_pPtr+=nSize;

抱歉!评论已关闭.