第一次接触Client-Server,使用CSocket的问题

来源:互联网 发布:中文校对软件 编辑:程序博客网 时间:2024/06/15 09:38

第一次使用CSocket,遇到的问题不少。比如:

1. A客户端主动发送数据至服务器,且会一直进行。那么,服务端处理A时,就会影响到其他客户端的数据接收。则需要开一个线程来处理A发送的数据,就会出现问题:创建线程时该传递什么参数?如何传?

有试过,直接将Receive(&ndata,sizeof(ndata)-1); ndata数组直接传递过去,但是在线程那边不太好接收,因为线程时在socket重载类里创建的,引用类中的数组需要类指针传过去。

后来,查资料,选择使用SOCKET hSocket = this->Detach(); 

线程里

CPaneClient *pThis = new CPaneClient;pThis->Attach((SOCKET)lpParam);
将套接字传过去。但这样,出现了第2个问题

2. OnReceive(int nErrorCode)函数中移除了改socket的hSocket ,则说明不能使用该socket。而服务器有需要给A传递一些数据。起初,很自然地把需要传递的数据,放到接收A数据的线程里,但是这样,A并不能接收到服务器发送的数据。 A与服务器该如何进行收发数据?

A客户端一直发送数据,但也需要接收服务器发送来的数据。在线程里,同时收发,好像不行。线程一直循环,判断

   nLen = Receive(&ndata,sizeof(ndata)-1); if(nLen>0)
>0则说明接收到数据,需要处理,会影响到发送。

后面选择A采用两个sokcet,一个Detach到线程里面进行循环发送,一个用于接收服务端的数据,显示至界面。当然,服务端需要区分好这两个socket,A用于发数据的socket服务端则用于收,反之亦然。

好在其他客户端与服务端的通信不多,仅在服务端发送指令后,发送对应的数据。不然,得考虑每个客户端建一个收发的线程。


期间,有发帖。在此附上链接,方便以后查阅。

Socket服务端接收数据的处理