各位大哥大姐,在线等贴。。。。。。

xilingxue8486 2011-04-12 07:22:49
各位大哥、大姐:
问题是这样子的,我现在要建立一个基于Sockect的数据访问程序。我是将数据在客户端逐个发送,数据是以结构体的方式逐个发送的,每个结构体的大小为400字节,并且结构体的数目有可能是几百个。在发送结构体之前,我先将这些结构体的的总的大小发送出去。

这里已经求出了sendnum的数值
pclient->send(&sendnum,sizeof(int));

for(int i;i<sendnum;i++)//num是结构体的数目
{
pclient->send(&message[i],sizeof(Message));
}

在接受端,我先接受结构体的数目:

int recnum;
pclient->Receieve(&recnum,sizeof(num));

然后,我开辟一个很大的内存空间,同时我定义了一个很大的结构体数组:
byte *pBuf=new byte[100000];
Message messagerec[100]

接着,我接受结构体数据:


BOOL Isstate
Isstate=TRUE;

int len=0
While(Isstate)
{
if(recnum>len)
{
rec=pclient->Receieve(pBuf,sizeof(Message)*recnum);//连续接受数据,直到和服务器端发送的数据量一致
len=rec+len;
Isstate=TRUE;

}
else
{
Isstate=FALSE;

}


}


最后,我通过memcpy函数将pBuf中的数据拷贝到结构体数组中;
memcpy(messagerec,pBuf,sizeof(Message)*100);


在While 循环中,我第一次接受到的数据大小,也就是rec值大概是8000多,具体数值忘了,接着,接受剩下的值,关键问题是我在messagerec数组中只能看到前面20个(有时候是21、22)的结构体数据,剩下的数据就看不到了,但是我在发送端发送20个结构体的时候,都能接受到。这个问题已经纠结了好多天了,请大哥大姐帮忙。
...全文
127 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xilingxue8486 2011-04-19
  • 打赏
  • 举报
回复
大哥,您好!有这么一个问题,我设计了一个类用户多用户之间的通信;在这里我设计的类名为CComunication.然后我从CSOCKET派生了一个CMySOCKET的类,在CMySOCKET中我添加了五个函数SetParentthis(CComunication *pCom);Onrecieve(*pCom);OnAccept(*pCom);OnSend(*pCom);OnConnect(*pCom);它们的类结构是这样的(.h):
Class CComunication
CMySOCKET
{
SetParentthis(CComunication *pCom);
Onrecieve(*pComu);
OnAccept(*pComu);
OnSend(*pComu);
OnConnect(*pComu);

CComunication *pComu;

}
在源文件中
#include"Comunication.h"
SetParentthis(CComunication *pCom)
{
pComu=pCom;

}
Onrecieve(*pComu)
{
{
pComu->Onrecieve();

}
OnAccept(*pComu)
{
{
pComu->OnAccept();

}
OnSend(*pComu)
{
{
pComu->OnSend();

}

OnSend(*pComu)
{
{
pComu->OnSend();

}
OnConnect(*pComu)
{
{
pComu->OnConnect();

}

在类 CComunication中我定义了两个CMySOCKET的对象指针:
CMySOCKET pServer;
CMySOCKET pClient;
并且在其构造函数中进行初始化:
pServer = new CMySOCKET();
pClient = new CMySOCKET();
并且调用:
pServer.SetParentthis(this);
pClient.SetParentthis(this);

完成了对两个Socket的初始化工作,其次我在CComunication类中的Onconnect()函数中实现了对pServer、pClient的创建和连接工作,这是CComunication类中的OnAccept()函数;
OnAccept()
{
pServer->OnAccept(pClient);

}
我现在只能实现一对一的连接和数据发送,怎么通过用多线程的方法实现多个客户端之间的通信,是不是在OnAccept函数中实现此功能,我是一个菜鸟,望大哥指点迷津!万分感谢!

xilingxue8486 2011-04-15
  • 打赏
  • 举报
回复
好的,大哥,谢谢你,问题就出在这里.已经解决了
龙哥依旧 2011-04-14
  • 打赏
  • 举报
回复
只简单看了一下
你这里
if(recnum>len)
{
rec=pclient->Receieve(pBuf,sizeof(Message)*recnum);//连续接受数据,直到和服务器端发送的数据量一致
len=rec+len;
pBuf += len;
Isstate=TRUE;

}
循环接收pBuf也得移动指针

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧