我在服务端传送以下结构体:
typedef struct SvMsg
{
int i;
char name[15][21];
char message[15][151];
}svMsg;
由于这个结构体大于1514个字节,在传送的时候被截成了两部分,接收的时候recv()执行了两次,怎么再组合出上面的结构体呢?
typedef struct SvMsg
{
int i;
char name[15][21];
char message[15][151];
}svMsg;
由于这个结构体大于1514个字节,在传送的时候被截成了两部分,接收的时候recv()执行了两次,怎么再组合出上面的结构体呢?
解决方案 »
- wcex.hIconSm 加载指定路径的参数
- 关于在OnEraseBkgnd中绘图的问题
- windows程序设计第七章编译问题
- 应用程序与驱动程序分别有什么作用??
- 程序调试进入CXXXApp theApp;时就告诉我:stack overflow。怎么回事?
- 只有ListView_GetItemCount为什么没有ListView_GetColumnCount?~~
- 使用dll导出类可以用Loadlibrary()的方法调用吗?
- 关于图像的,高手请进!
- Microsoft Speech SDK 5.1软件包在哪里找?
- 求一种能将文件压缩成zip件后,又不能让别人解压的软件?
- 有没有现成的网络通信的控件??
- 怎样把对话框关闭叉叉变为无效?多多指教
int n = sizeof(SvMsg);
while(n != 0)
{
int rcvnum = recv();
n -= rcvnum ;
}
memcpy
强转
delete []
{
AfxMessageBox("½ÓÊÕÊý¾Ý·¢Éú´íÎó¡£");
return 0L;
}
if(recv(ClientSocket,(char *)&servermsg,sizeof(servermsg),0) == SOCKET_ERROR)
{
AfxMessageBox("接收数据错误!");
return 0L;
}
servermsg是一个svMsg的结构体,可就是不行,每次能处理的只是最后一个包!
每收到一个包就memcpy
然后强转new的并memcpy好的指针
最后delete
ok
int i = 0;
for(;;){
int len = recv(ClientSocket, (char*)&msg + i, sizeof(msg) - i, 0);
if(len == SOCKET_ERROR)
return 0;
i += len;
if(i == sizeof(msg))
return &msg;
};
pms=(char*)Malloc(sizeof(svMsg))
if(!pms)错误处理
int i=0;
int len;
while((len=recv(s,pms+i,sizeof(svMsg)-i,0))>0 && i<=sizeof(ms)){
i+=len;
}
if(len<0)错误处理
hehe:)我没有调试,你试试吧。应该没有问题的