SOCKET通行問題

archload-1 2007-02-05 10:44:53
大家好,我想問一下,我現在需要完成這樣一個任務:在不固定時間給客戶端發送消息。這樣的程序需要如何實現,我想應該用到了亂數產生器。不知道還需要什麽方面的知識才可以實現。請指教
...全文
225 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoxiangdong 2007-02-06
  • 打赏
  • 举报
回复

//这是一个NPC服务器给在线会员随机的奖励金币的线程函数,仅供参考.
//注意,这是线程函数,一定要在单独一个线程中执行!
void NPC::RandomMoney()
{

//枚举房间,给每个房间产生一个事件
RoomsList::iterator node=_rooms->Items().begin();

ChatRoom* room=0;

while(node!=_rooms->Items().end())
{
room=*node;
if(room && room->id!=0)
{

COleDateTimeSpan t =COleDateTime::GetCurrentTime()-room->_lastGiveMoneyTime;
int size=room->Size();

if(t.GetTotalSeconds()>(_setting->Get("NPC.RoomRandomTimerPerUser",180000))/(size+1))
{
room->_lastGiveMoneyTime=COleDateTime::GetCurrentTime();

int pos=Random(0,size-1);
int money=Random(_setting->Get("NPC.RoomRandomMoneyMin",10),_setting->Get("NPC.RoomRandomMoneyMax",1000));
int messagepos=Random(1,10);

TRACE(L"%d,%d,%d,%d\r\n",size,pos,money,messagepos);
ClientMap::iterator cnode=room->Items().begin();
Client* p=0;

while(cnode!=_clients->Items().end() && (pos-->=0))
{
p=(*cnode).second;
cnode++;
}


if(p)
{
_db->Execute(str::Format(L"p_money_add %d,%d",p->uid,money));

CString msg=LS(str::Format(L"NPC.GiveMoneyRandom%d",messagepos));
msg.Replace(L"<NickName>",(TCHAR*)p->NickName);

_server->SendSystemMessage(room,str::Format(msg,money));
}
}

}

node++;
}


}
archload-1 2007-02-05
  • 打赏
  • 举报
回复
我的环境:visual studio 2005 MFC Dialog CAsyncSocket class Program
vcnewer 2007-02-05
  • 打赏
  • 举报
回复
有 while (true) 的程序一般使用多线程,在子线程中使用,程序就不会死掉了
比如这样,在主线程中 让 flag = false;可以让子线程的循环退出。
bool flag = true;
....
while ( flag )
{
//send(...);
sleep(100);
}
archload-1 2007-02-05
  • 打赏
  • 举报
回复
也就是说我要如何实现消息的自动发送。
archload-1 2007-02-05
  • 打赏
  • 举报
回复
可能我寫的有問題,我現在的問題是,不知道怎麽實現給客戶端發送消息,隔幾秒鐘發送一次,在隔的這幾秒鐘程序怎麽運行,用while(true)讓程序循環,程序就會死掉。

Sleep和消息處理機制怎麽實現?
vcnewer 2007-02-05
  • 打赏
  • 举报
回复
rand()函数: 产生随机数,做为 下次发消息间隔的时间秒数
archload-1 2007-02-05
  • 打赏
  • 举报
回复
發送消息部分不知道怎麽實現,因爲要隔幾秒鐘發送一次,所以想到了用while(true)循環,這樣程序就會死掉,所以不知道怎麽寫了。請指點
ouyh12345 2007-02-05
  • 打赏
  • 举报
回复
关键在于确定什么时候给客户端发消息.
而socket部分都是一样的.

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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