现在我是做服务器端,客户端的情况不属于我来做,公司只要求用winsock1.1版的。想问下如何判断两端是否是连通的?我现在用的是send发送给客户端,来查看返回值,来判断是否还处在连通状态,想问下,除了用SEND的方法,还可以用什么?客户端的处理情况我不太清楚,所以我怕发送send会造成一定的问题,我之前用过select来判断是否有客户请求,可是效果不是很明显,在我监视select第三个参数的时候,总是成功。。这样轮循下去非常占CPU资源一下升到60%之上,想问下达人们还有什么办法来判断两端是否连通。谢谢各位了,我也是刚刚接触通讯这块,请达人们帮帮我

解决方案 »

  1.   


    关于心跳包
    百度知道
    http://zhidao.baidu.com/question/32992581.html?fr=ala0
      

  2.   

    AA  55   AA  55
      

  3.   

    谢谢高手们,还有一问题就是 我在连续send的时候 ,有可能接收方把消息组合成一个消息过去,
    比如我连续发了十个
    send(sockObject,"hello",6,0);
    可能在客户端那边就接到两条消息,
    "hello"
    "hello\0 hello\0 hello\0……"
    类似的。。可是这时问题来了,我在发送文件的时候,如何告诉对方已经发完了,让客户端停止recv函数的等待?
    或者说是怎么让客户的recv函数处理超时问题
      

  4.   

    发送的数据肯定要有一个协议,比如XMPP使用的是XML

    <iq from="" to= "" type="get/result" xmlns="">
      

  5.   

    比如说我有一个协议是这样的
    typedef struct _TcpPayload
    {
      char Version      : 4 ; //消息的版本,0x0为1.0版本。
      char MessageType  : 4 ; //消息类型:
      char NameLength ;       //配置文件名长度
      char *Name ;            //配置文件名
      char DataTypeHigh : 4 ; //报警类型
      char DataTypeLow  : 4 ; //报警类型
      USHORT DataLength;
    }TcpPayload;这是我们的协议要求的的字段,我给他弄成结构的形式了,问下,这样可以吗?如果可以结构体是怎么发送的?
    是直接声明一个TcpPayload test;
    char *buf = new char[sizeof(test)] ;
    memset(buf,0,sizeof(test));
    memcpy(buf,&test,sizeof(test));
    send(sockObject,buf,sizeof(test),0);
    这样发的过去吗?还是一个字段一个字段的发送?实在不好意思,给了那么点分,还问那么多问题。。我在追加点分看看。。麻烦高手们帮帮忙。这个项目挺急的。谢谢各位了
      

  6.   

    结构体作为sizeof的参数应该不是得到它所有字符的长度吧
    send的应该就是个字符串,把结构体的各个字符拼成一个字符串再发送不知道可以不
      

  7.   

    应该是吧也就那个指针不是其它应该都是,转换成BIT应该都是那样,不过我不知道这样发有没有问题。
      

  8.   

    CSDN上有个例子程序,lz可以参考:http://download.csdn.net/source/1916582
      

  9.   

    你的数据包就是一个_TcpPayload
    你一次发一个_TcpPayload就好了
    对方肯定也是一个_TcpPayload一个_TcpPayload解析的
      

  10.   

    那应该怎么样把结构串行化呢?我在结构前面加上这个,改成紧位的
    #pragma pack(push,1)还有那个包头包尾,能方便说个例子吗?xianglitian 方便加下我好友吗。 100161026有几块不明白的想问问。。
      

  11.   

    我说的紧位和#pragma pack(push,1)没关系
    你还是没有理解通信协议是什么
    查查相关资料吧
    今天太晚了
    明天上班有时间的话我看看加你一下
      

  12.   

    能给我举个包头包尾的例子吗??struct head
    {
     int version;
     int size;
    };上面这个算包头吗?
      

  13.   

    Accept不可以吗?

    if(m_psockServer->Accept(*m_psockClient[msgcount]))
      {
      //初始化套接字pSocket
      //pSocket->Init();
    m_psockClient[msgcount]->Init();
      AfxMessageBox("Server 连接成功");
      }