现在遇到这样一个问题,我的客户端和服务器通过一个tcp socket连接,
要求客户端能等待服务器发送的数据并随时收取,同时客户端可以根据
用户的需要随时发送数据到服务器,但有些数据还需要等待服务器应答。
初步打算起两个线程一个收,一个发,socket为nonblocking方式工作,
并采用select方式, 但是两个线程同时读写一个socket会不会出现问题?另外,有没有其它更好的方法

解决方案 »

  1.   

    如果流量大的可以采用重叠模型。如果流量不大可以考虑采用WSAAsyncSelect和WSAEventSelect.
    建议阅读<<Windows 网络编程技术>>
      

  2.   

    流量不大,没必要用重叠模型。
    wsaeventselect用在这样的情况不太方便,我到是也在考虑用asyncselect,其实和select
    也没多大区别。
    我的客户端大概的结构是这样的:两个线程分别负责发送和接收,发送比较简单,等界面
    给个事件就发数据;接收稍微复杂一点,要不断的收,并且解析我的协议,然后根据协议
    类型把数据发给界面各个窗口,协议逻辑收发线程都不管。现在我主要是不知道多线程能不能同时读写一个socket。