CAsyncSocket我就是继承的这个。
引用 16 楼 tiger9991 的回复: 发送可以是一次,你接收不可能是一次的,要一次次。 非常对! 循环收够为止。仅限CSocket可以这么干,如果CAsyncSocket循环收,就非常非常笨了。
发送可以是一次,你接收不可能是一次的,要一次次。
有这么复杂么? 首先协议是必须的,第一个帧数据过来后,接收函数看到接收标识符就开始显示“正在接收” 最后一帧数据过来,标识符是结束标记后,就把正在介绍标记删除
m_clientSocket.m_nLength = m_clientSocket.Receive(m_clientSocket.m_szBuffer, sizeof(m_clientSocket.m_szBuffer));
引用 12 楼 tiger9991 的回复:有这么复杂么? 首先协议是必须的,第一个帧数据过来后,接收函数看到接收标识符就开始显示“正在接收” 最后一帧数据过来,标识符是结束标记后,就把正在介绍标记删除C/C++ code?1m_clientSocket.m_nLength = m_clientSocket.Receive(m_clientSocket.m_s……
多起个线程专门和服务器通讯,这样可以用同步socket 或者 用异步socket来判断socket有没有收到回复数据
1. 制定协议,就是传送数据前先传要发送的数据量,然后再一个字节一个字节的接收,就样就可以实现你的功能. 但这种方法不好,效率太低了,如果数据量大还可能丢包. 2. 和第一种类似,但要求客户端分几次传数据,这样,你收不全数据,就认为正在接收数据. 这种方法也不好 3. 直接对网卡底层编程,这样就知道什么时候有数据. 其实现在计算机及速度太快了,你这种功能很难实现,除非大量数据比如几……
引用 6 楼 zhuliming_it 的回复: 我就是重载的OnReveive。 所以你没有挖掘出CSocket的特点。
我就是重载的OnReveive。
CSocket是基于异步的阻塞套接字。主动Receive时,因为是阻塞的,所以你点击其他按钮自然也没有效果。 我觉得你可以这样设计客户端: void OnButtonXXX() { Send() //发送请求给服务器。 ShowWaitingDlg() //显示正在读取的进度条 Receive() //接收服务器的数据,这里要主动收,千万别重载OnRece……
18,356
社区成员
64,214
社区内容
加载中
试试用AI创作助手写篇文章吧