我做了 一个聊天室的程序 分为 客户端和服务器2个程序,我用的是WINSOCK 写的,问下
1。当客户推出时销毁掉 客户这边的SOCKET  服务器的与之通讯的SOCKET 会自动销毁吗~如果不能怎么销毁~~~
2。如何处理 用户上线时在服务器这边保存 客户姓名 (主要是处理的方法 )。
                                                        谢谢了

解决方案 »

  1.   

    我认为不会吧?
    应该是产生一个onclose的事件。
      

  2.   

    有个FD_CLOSE  具体方法是怎么做就不知道了~~
      

  3.   

    不知道你说的保存是什么意思,你可以用各种数据结构去保存阿。比如用vector什么的都可以,数组也可以。
      连接上的时候就存进去,超时或者断开就从数据结构中删除就可以了。
      

  4.   

    我用的是 struct clist
      {
     int no;//用户在服务器的编号
     CString name; 姓名
     SOCKET cs;  与客户通讯的SOCKET
       };
    来保存~~  编号是在
    case FD_ACCEPT:
    cl[i].cs =accept(serve.m_hsocket,NULL,NULL);
    cl[i].no=i;
       里面直接赋予的 但是怎么做才可以 把姓名也传递过来保存~~
      

  5.   


    不是特别清楚您的意思,你说的姓名如果是机器名,可以用下边的方法。
             int addr=inet_addr(LPCSTR(ipAddress));
    HOSTENT* hp=NULL;
    hp=gethostbyaddr((char*)&addr,4,AF_INET); if (hp->h_name!="")
    {
    crp->m_ClientIP = hp->h_name;
    }else{
    crp->m_ClientIP = ipAddress;
    }如果是对应自己编号的名字,那么可以用个简单的map把no和名字对应得到no就有名字了。如果是随便输入的,那么可以在连接后发送自己的名字字符串,自己接受(自己最好定一个简单的协议以免发生错误,把名字当成聊天内容就不好了。)
      

  6.   

    我的意思是 服务器  用 case FD_READ:
     for( j=0;j<i;j++)
    {
     if(cl[j].cs==wParam)
    {
     len=recv(cl[j].cs,s,1024,0);
     
    接收聊天的消息,我想把客户上线时取的名字也传过来保存在服务器里怎么 处理~~~