使用CSocket编程时,需要传输的是自己所定义的类所生成的对象,请问该如何发送、接收?
需要考虑接收发送的缓冲区大小吗?如果对象太大,会不会需要分包?顺便问一下,我看了看论坛上的问题,好像大家都没有用CSocket类,而是直接用了最初的winsocket,难道说CSocket类有什么不好吗?
需要考虑接收发送的缓冲区大小吗?如果对象太大,会不会需要分包?顺便问一下,我看了看论坛上的问题,好像大家都没有用CSocket类,而是直接用了最初的winsocket,难道说CSocket类有什么不好吗?
解决方案 »
- [MFC]在对话框程序中怎么写一个每一帧都会被调用的Update()函数?
- 求助:界面问题:想做一个千千静听显示歌词那样的界面
- 请教,做一个压缩程序有没有什么资料可以参考?
- 只用高手才能够回答的问题,字符串函数strlen()中出现的问题!!!请进来看看!!!
- 高分求救用NERO SDK 刻录整个目录(包括子目录)到光盘的源代码
- 请问,pDC->GetDeviceCaps(BITSPIXEL)怎么可能返回0呢
- 请问,如何才能象在调试状态下,查看某个变量的值一样的,动态查看某个函数和过程的返回值
- 各位老大救命!请帮忙解决打印预览出现乱码的问题!
- 关于读写文件的问题
- 不知道有那位兄弟碰到过串口打开 CreateFile 的时候假死的情况
- 怎么实现应用程序的命令(如会 在程序后加 "-Open" 像"C:\Ts.exe" -Close)或者怎么实现双击我设置的后缀名立即打开该文件
- 关于进程堆的疑问
因为类毕竟封装的东西太多
接收的时候,把char*指针强转成类的指针,
不好意思,我没有接触过这些,还请多多指教:)
CSocket在这种情况下可能出现异常的错误。
用memcpy把类里的东西COPY到一个BUFF,再发送,
接收的时候,把char*指针强转成类的指针。are u sure ,呵呵,是测试过的吗?Mark。
我试了一下:
这是我定义的类:
class CTest
{
char* name;
char* type;
char* where;
}声明一个对象
CTest marry;
然后在发送前转换:
char* buf[100];
memcpy(buf,marry);
m_clientSocket->Send(buf,99);单步调试后发现memcpy(buf,marry);执行后根本就不对,都不知道转化成什么了。是我理解的不对吗?还有什么办法吗?
类是怎么写的
然后发送(呵呵,我这么想的不一定对,因为联合在内存中是连续存储的,所以你发的应该是和
发一个BUffer缓冲区没什么区别)
CTest marry;
然后在发送前转换:
char* buf[100];
memcpy(buf,marry);
--------------------------------------------------------------------------------
楼主 这么做不对吧!
你为什么不这样?
cahr *buf=new char[100];
memcpy(buf,marry.name,strlen(marry.name));
memcpy(buf+strlen(marry.name),marry.type,strlen(marry.type));
memcpy(buf+strlen(marry.name)+strlen(marry.where),marry.where,
strlen(marry.where));
..........其实就是所谓的序列化。
当然也可以用CSocketFile类。它直接支持序列化