请教这样一个问题:在开发诸如联众网络游戏时,需要从服务器上取得游戏列表和房间列表,以完成客户端的游戏列表和房间列表的显示,假设在初始化游戏列表时向服务器发送请求,然后等待服务器的回音以决定接下来的动作(得到正确数据正常显示,如超时则作相应处理),如何实现该功能??
现在我采取的方式:
CMySocket
CMySocket::sendpackage(CPackage &cPack)
{
...
}CMySocket::OnReceive(int nNum)
{
..
switch(message)
{
case: 请求游戏列表的消息的回音:
//send data to ListCtrl
break;
....
}
...
}CData:
CData::GetGameData(CArray<xxx, xxx> &lstGame, DWORD dwSomething)
{
CMySocket cs;
CPackage cPack;
(填充Packge数据)
cs.sendpackage(cPack) -->向服务器请求游戏和房间列表
//Notice: 希望在这里等待,得到服务器的数据
....
}Begin InitialList
....
CData maindata;
maindata.GetGameData(....) //取得服务器数据,第一个参数中返回结果
...
End InitialList
有什么好办法吗??或者谁又跟好的实现机制??谢谢。
现在我采取的方式:
CMySocket
CMySocket::sendpackage(CPackage &cPack)
{
...
}CMySocket::OnReceive(int nNum)
{
..
switch(message)
{
case: 请求游戏列表的消息的回音:
//send data to ListCtrl
break;
....
}
...
}CData:
CData::GetGameData(CArray<xxx, xxx> &lstGame, DWORD dwSomething)
{
CMySocket cs;
CPackage cPack;
(填充Packge数据)
cs.sendpackage(cPack) -->向服务器请求游戏和房间列表
//Notice: 希望在这里等待,得到服务器的数据
....
}Begin InitialList
....
CData maindata;
maindata.GetGameData(....) //取得服务器数据,第一个参数中返回结果
...
End InitialList
有什么好办法吗??或者谁又跟好的实现机制??谢谢。
int rcvtime=1000;(1秒)
setsockopt(socket,SOL_S0CKET,SO_SNDTIMEO,(char *)&rcvtime,sizeof(rcvtime));
setsockopt(socket,SOL_S0CKET,SO_RCVTIMEO,(char *)&rcvtime,sizeof(rcvtime));
你指的是Client端的阻赛??我要的就是这个效果:-)大家还有什么好建议吗??
while(没得到完整数据)
{
nCount++;
if(nCount > 1000)
{
break;
}
Sleep(10);
}
程序使用Sleep函数时,我的网络处理类能进行数据的接收处理吗??或者应该这么说:在While循环中调用Sleep时,程序是Hold在Sleep那个点上,还是可以处理别的东西,比如说这时服务器有数据到来,他也能进行接收工作??
谢谢您的热心帮助和参与,但我想您的方法不是我所要的...其他人还有办法吗??