一个消息提示托盘程序的开发历程(采用socket技术,附源代码)二---服务端源代码[2]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 lcllcl987 的 blog

    btnlisten->enabled=false;
    btndisconnect->enabled=true;

}
//---------------------------------------------------------------------------
void __fastcall tform1::clientsocket1connect(tobject *sender,
      tcustomwinsocket *socket)
{
//当用户提出连接请求后,客户端会触发oncreate事件,
    statusbar1->simpletext="连接到:"+server;
}
//---------------------------------------------------------------------------
void __fastcall tform1::serversocket1accept(tobject *sender,
      tcustomwinsocket *socket)
{
//在服务器接受了客户的请求后会触发onaccept事件,
//在这个事件处理程序中将标志服务器端的变量isserver设为true,
    isserver=true;
    statusbar1->simpletext="连接到:"+socket->remoteaddress;

}
//---------------------------------------------------------------------------
//---- 非阻塞传输方式,当其中的一方进行写操作时,
//另一方会触发onread事件(客户端)或onclientread事件(服务器端),
void __fastcall tform1::serversocket1clientread(tobject *sender,
      tcustomwinsocket *socket)
{
logininfo *loginfo = new logininfo;
socket->receivebuf(loginfo,50);
  string mysql = "select yhxh from xt_yh where yhbh='";
   mysql+=loginfo->userid;
   mysql+="' and pwd='";
   mysql+=loginfo->pwd;
   mysql+="'";
   adoquery2->close();
   adoquery2->connection = adoconnection1;
   adoquery2->sql->clear();
   adoquery2->sql->add(mysql);
   adoquery2->open();
   int num = adoquery2->recordcount;
   messageinfo *loginmsg =  new messageinfo;
   int msgtype;
   if(num>0){
        msgtype=0xa;      //ok
   loginmsg->msgtype=msgtype;
   }else{
          msgtype=0xb;      //nobody
   loginmsg->msgtype=msgtype;
  }
  for(int i=0;i<serversocket1->socket->activeconnections;i++){
    if(serversocket1->socket->connections[i]->remoteaddress==socket->remoteaddress)
         serversocket1->socket->connections[i]->sendbuf(loginmsg,244);
  }
  adoquery2->close();

}
//---------------------------------------------------------------------------
void __fastcall tform1::btndisconnectclick(tobject *sender)
{
serversocket1->close();
btnlisten->enabled=true;
btndisconnect->enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall tform1::serversocket1clientdisconnect(tobject *sender,
      tcustomwinsocket *socket)
{
statusbar1->simpletext="正在监听...";
}
//---------------------------------------------------------------------------
void __fastcall tform1::clientsocket1disconnect(tobject *sender,
      tcustomwinsocket *socket)
{
    btnlisten->enabled=true;
    btndisconnect->enabled=false;
    statusbar1->simpletext="";
}
//---------------------------------------------------------------------------
void __fastcall tform1::clientsocket1error(tobject *sender,
      tcustomwinsocket *socket, terrorevent errorevent, int &errorcode)
{
//---- 此外在客户端还应该增加错误捕获机制,
//当用户输入无效的服务器名或服务器端没有
//处于监听状态时能够及时给用户反馈信息。
    statusbar1->simpletext="无法连接到:"+socket->remotehost;
    errorcode=0;
}
//---------------------------------------------------------------------------

void __fastcall tform1::timer1timer(tobject *sender)
{
  try{
  if(adoconnection1->connected){
  string strmessage="";
   adoquery1->close();
   adoquery1->connection = adoconnection1;
   adoquery1->sql->clear();
   adoquery1->sql->add("select t.message_id as 序号,t.user_code as 责任人, t.message_title as 任务名称, to_char(t.create_time,'yyyy-mm-dd hh24:mi') as 时间, t.is_read as 是否阅读 from user_message t where t.is_read='f' and t.task_state = 'assign' order by t.message_id");
   adoquery1->open();
   messageinfo *msg =  new messageinfo;

           string  messageid;          //任务序号
           string usrcode;            //用户帐号

本文关键:一个消息提示托盘程序的开发历程(采用socket技术,附源代码)二---服务端源代码
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top