以前用过MFC的Csocket可以传递数据结构地址,现在用winsock进行网络通信,winsock要求收发的数据缓冲指针类型是const char FAR*,我要发送一个数据结构,只好把它强制转换成char*,可是传递的数据到接收是就乱了套,有没有其他方法?
解决方案 »
- 一个视频处理过程操作一下buffer数据块
- C++的MFC编程中不知道窗口在初始化位置时是响应的是哪个消息.我在PreCreateWindow中定义了位置.窗口刚出来时还是会在屏幕的左上角闪一下.怎样避免
- 关于线程的执行与对话框的显示以及WaitForSingleObject(...)的关系
- 请问如何在vc程序中加汇编
- 如何打开任意格式数据库的问题。
- 如何用XML传递二进制的东东?在线期盼。。。。。
- 一个关于oledb数据插入的问题
- 为什么我的计算机安装VC++总是出现非法操作?
- 请大家帮我看看下面这个错误是什么意思(20分放送)
- VC中一个对话框类如何使用另一个对话框类的成员变量?
- 关于Heap
- 如何在CEdit控件中进行光标定位
{
int a;
int b;
int c;
}struct a a1;
char BUF[100];
memcpy(BUF,(void *)&a1,sizeof(struct a));
send(Buf,....);
winsock中
int PASCAL FAR send( SOCKET s, const char FAR* buf, int len, int flags);
typedef struct
{
long systemType;
long Start;
long Count;
long Range;
long Deviation;
timeval startTime;
float pressure;
float temperature;
float heading;
float pitch;
float roll;
float WORKData[6][1024];
}WORKDATA;
WORKDATA resultdata;
发送端:
while(1)
{
//resultdata赋值
send(s,(char*)&resultdata,sizeof(WORKDATA),0);
}
接收端:
while(1)
{
numrcv=recv(ns, buffer, sizeof(WORKDATA), 0);
}
每次接收时numrcv数字不等,怎样重组成WORKDATA结构呢
project->setting->C++>Code generation>struct member alignment = 1 byte
RECV也使用同样的方法
SEND函数返回的是你把多少数据加到TCP系统缓存中了.
如果你的STRUCT有NSIZE这么大,代码可以这样写:
int nSend = 0;
char buf[nSize];
memcpy(.......);
while (nSend<nSize)
{
int n=send(s,buf[nSend],nSize-nSend,NULL);
if(n<0)
{ error;
break;}
if(n==0)
{ ;break;}
nSend+=n;
}