用winsock的阻塞方式进行网络编程,由于接收工作数据量大,为接收数据单独开了一个辅助线程,发命令在主线程里面实现,但是这样就不能够及时收到命令应答了,怎么办
可不可以让辅助线程只接收工作数据,命令应答还是由主线程接收呢?

解决方案 »

  1.   

    只要你的辅助线程是接收SOCKET数据的,从SOCKET中收到的任何东西都会被你的辅线程截获。我不太理解你说的“命令应答”是什么
      

  2.   

    同楼上,增加一点说明既然想在同一个SOCK里接收数据和应答,除非你知道格式上的区别,或者规定应答格式,以用来区分如果不能规定格式,那你和没一个客户端就建两个SOCK,一个用来收发命令,一个用来收发数据。
      

  3.   

    如果客户端建立两个SOCK的话,服务器是否也要建立两个相应的SOCK,服务器怎么区分客户端的两个SOCK
      

  4.   

    服务段可以根据socket句柄来判断那个是数据传输的,那个是控制命令的。
    比如
    struct MyParam{
    SOCKET sCtrl;
    SOCKET sData;
    }param;处理
    先接收控制的连接
    param.sCtrl = accept(s1...);
    //读取sCtrl的命令数据,发现需要建立新的连接时候,需要监听一个新的端口号,然后给客户端发送可以连接的命令。
    //客户端收到可以连接命令,建立一个新的连接。
    服务端
    param.sData = accept(s2,.....);如果你设计协议经验丰富的话,可以客户端,服务段都只用一个连接,不多需要对每个接收的数据包进行整理,然后按照自己的协议来处理数据。另外FTP是另外一种方式互为客户服务端。
    即Client 连接server,处理一些命令后,要接收数据了,Client 开始监听端口,Server建立一个连接来连Client,建立后把数据发送给Client。怎么样说这么多能解决你的问题吗?