我要做的c\s 的服务器和客户端:
1。 功能是服务器接受各个客户端发过来的数据,并根据用户选择的客户端ip 显示在edit框内, 数据包是一个结构,数据量很小,  但是客户端频繁发送,
2。 这个程序要用在广域网中, 跟局域网有什么差别,
3。原理是普通socket  ,  有一个连接就建立两个线程。 我知道这样很浪费资源,很低效,有没有什么好的模型 , 我正在想用重叠io 模型,  是否可行?
4。 还有没有注意的问题,比方说 一方中断, 一方怎么办?

解决方案 »

  1.   

    有一个连接就建立两个线程,为什么?
    在有连接时就记录accept()的socket不行吗?
    接收和发送通过socket操作
    都用WSAAsyncSelect()处理数据接收和连接断开事件
    要是有client断开,删出对应socket
      

  2.   

    没必要用重叠IO
    重叠IO只不过把应该由程序做的事情交给系统去完成,
    从CPU等资源占用上看起来好象是降低,实际系统本身负担已经大大增加了,
    一个线程就可以完成,没必要用两个线程,
    如果实在有必要,
    可以用FIBER,我不知道应该叫它什么名称,可能叫微程比较确切,、
    是比THREAD更低级的东西,由你自己调度CPU时间,可以用2个FIBER代替一个线程
      

  3.   

    那重叠IO还不如 socket ?
    那 2  ,4 问题怎么样?
      

  4.   

    2.知道ip就好了,应该没区别
    4.用WSAAsyncSelect()任何一方断开另一方都会收到相应的消息!自己做处理
      

  5.   

    2 没区别,只要协议是TCP/IP,只不过多了一个NAT问题,但是IP层已经自动处理了
    4 对方中断问题,不能只依赖系统WSAAsyncSelect() 或者FD——SET等类似功能,应该引入协议级别的心跳包,因为里面有个硬断问题,只能依靠协议来处理,否则将出现死等待