我现在做个后台系统,下位机运行在server模式,有40-50个,我的程序作为client与各个服务器连接。问答模式得到下位机的数据。
请问有没有谁做过类似的Sock模型,最好有例子。
很常见的问题,可是网上都是多client访问单服务器的例子。
需要为每个连接开线程吗?

解决方案 »

  1.   

    多client访问单服务器对client程序来说,就是单client访问单server你要单client轮询多server,其实就是
    client访问server1,
    client访问server2,
    client访问server3,
    .
    在某一时刻,其实还是单client访问单server。比如最简单的实现,你把client访问单server的代码封成一个函数AccessServer(CString strServerIP);那你轮询多server就可以通过循环调用这个函数来实现。
      

  2.   

    主要问题是如何区分开每个服务器返回的数据。
    声明了 nClientSocket[max]
    服务器列表在数据库中定义好了。
    但是有些定义好的服务器可能不存在,这就需要把它临时去掉,下次循环不再访问他。但是不能永远不访问,过一段时间还是要尝试连接,如果存在了,那把它加入列表,感觉很复杂,头有点大,思路乱了。
      

  3.   


    class server : public CSocket
    {
      CString m_sServerName;
      CString m_sServerAddress;
      CString m_sServerConfig;  DWORD  m_nFailCount;
      DWORD  m_nWaitCount;
      BYTE   m_data[BUFFLEN];
    }如上示例,
    每个server链接保存有自身特定的各种信息,这样子就能清楚的区分各个server的数据了。链接失败的话 m_nFailCount++; 成功的话 m_nFailCount = 0;
    如果 m_nFailCount >= 阀值,就设定 m_nWaitCount = 等待周期。每次轮询,如果 m_nWaitCount != 0; 就 m_nWaitCount --; return; 否则轮询。
      

  4.   

    服务端应答的时候将服务端的信息(比如IP,端口,其它)传回来就可以区分服务端了,另外这种应答如果允许偶尔不可靠的话,用UDP来发送请求比较合适。
      

  5.   


    UP
    这应该正是lz需要的
      

  6.   

    客户端可以多线程,开一个线程连接一个服务器,同时保存一下服务器的ip,名称等来区分各个服务器返回的数据,然后根据你的需要启动多个线程来查询服务器的数据,通过socket通信等
      

  7.   

    先结帖
    谁有这方面的例子,发给我,另给100分
    yansh(at)163.com