C++socket程序如何实现持续接收数据

我在C++中运用阻塞模式的socket套接字接收数据存储在char buf[BUF_SZIE]中,然后对数据进行处理。socket的接收是在按钮中实现的,就是点一下按钮接收一段数据,我想在点完按钮之后一直处于接收数据的状态该如何实现,求各位大神指点一二
ZeroMemory(buf, BUF_SZIE);
retVal = recv(sClient, buf, BUF_SZIE, 0);
if (SOCKET_ERROR == retVal)
{
printf("send failed!\n");
closesocket(sClient);
WSACleanup();
}
由于需要对buf[BUF_SZIE]缓冲区清零不然会出现乱码,以致接收到的数据也会每次清空,不知道该如何实现这个一直接收的过程,求指点

ZeroMemory(buf, BUF_SZIE);

while(true)
{
        retVal = recv(sClient, buf, BUF_SZIE, 0);
if (SOCKET_ERROR == retVal)
{
printf("send failed!\n");
}
else
{
        把buf中的有效数据保存一份到其他地方,比如一个List<BYTE[]> 什么的,一直往里面添加,处理的线程处理了数据后,把处理过的数据从List中删除就可以了
}
}

closesocket(sClient); 
WSACleanup();


为防止卡死主线程,你要创建新线程来执行

追问

多谢大神,本人编程水平太菜了,请问创建线程这个应该怎么弄呀,可以有一个大致的框架参考下么?最好能留个邮箱交流,最近被这个弄得焦头烂额,求大神指点。
刚刚没有创建线程试了下,真的卡着不动了o(╯□╰)o

追答

网络搜索 VC++ 多线程

http://blog.163.com/sky_sgx/blog/static/19943919420111012350385/

追问

想贴代码来着,可惜太长了贴不下,可以留个邮箱求教问题么?

追答

主要还是教方法
你要先学会怎么创建新线程,让这个线程去执行某个函数
函数中就用 while(true){},线程就一直循环干某件事,当然要增加个退出循环的变量和判断,这个变量的值为某个值的时候,就退出循环,没有代码可以执行了,函数执行完了,线程就自己结束了

循环中要干的事,当然就是读数据,把读到的数据复制一份放到别处,最好是放到链表中,以添加的方式放,每次都添加到末尾

温馨提示:内容为网友见解,仅供参考
无其他回答

c++socket编程中怎样接收不定长大小的消息?
你可以先发送长度(比如一个int),再发送数据;接收方先接收长度(int),然后根据长度接收数据

c++ 多线程socket编程可以多个线程同时accept数据吗
常见的一种做法是在一个socket上调用accept,接受连接以后丢给某个线程去完成接下来的事情

C++ 如何使用 Socket 类向 HTTP 服务器发送数据和接收响应
第二个参数是要连接的地址,第三个参数则是地址的大小 UDP编程部分在简单的多线程聊天室的编写中详细说明 他是基于无连接的协议 所以编写服务器端时只要绑定了套接字后就可以开始传送和接受数据,而客户端则只需创建套接字就可以开始传送和接收 同过 recvfrom和sendto函数来操作 使用closesocket(m_sock...

C++ SOCKET编程两个线程通讯互传数据怎么做,
发端先准备好socket并监听,然后通知收端,收端利用收到的端口号连接到发端,然后两边开始互传,收端就recv,发端send。直到传输完毕。

急!C++ 的socket问题!请各位帮帮忙!
LZ你这用的是UDP协议,没有connect,所以无法在判断一连接上的时候发送“连接成功”给客户端,不过可以在服务器收到数据的时候(即recvfrom(socket1,buffer,sizeof buffer,0,NULL,NULL);后面)给客户机发送一条信息,然后让客户机进行接收(在 sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*...

C++,socket编程,server端接收的数据不完整,中间参杂十六进制的CDCDCDCD...
p = p + readLen;要想得到你预期的效果应该把server那里改成 char *p = (char*)rawDataBuffer; \/\/rawDataBuffer是unsigned int型 int n = 0;while(n < 16 * 4000){ readLen += recv(sockConn, p, 4000, 0);p = p + readLen;} closesocket(sockConn);这样才能接收到完整的数据 ...

socket 编程中,write 23107个字节,read 读取完23107个字节后,竟然还能...
\\0'接收,而发送的数据不以'\\0'为结束符,所以你的接收缓冲区数据肯定是乱的,因为显示出来的数据超出了你接收的数据。一般情况下,socket编程中,发送与接收协议都是需要需求自己封装的,这样会使问题简单化,也便于后期调试。参考资料:精通Windows Sockets网络开发:基于Visual C++实现,第三章 ...

怎么用C++绑定程序的udp socket接受端口
其实这个时候不用重新创建socket绑定端口也没关系的,因为UDP本来就是无连接的。它和TCP不同,它可以针对每次发送都指定不同的目标地址的,也不管你数据有没有发到。一个UDP端口只能被一个进程绑定一次,你的程序A关闭UDP端口并重新打开,B那边如果也要重新打开端口的话也要先关闭原来的端口(就是关了...

C++实现Socket连接通信
创建socket连接,尝试与服务器建立连接。接收服务器发送的数据后,关闭连接。四、运行结果部分,将展示客户端与服务器端成功通信的状况。五、小技巧环节,提示使用@err,hr来监视输入,以便查看错误信息。总结,通过遵循上述步骤,可以实现C++环境下Socket连接通信,确保客户端与服务器端能够顺利进行数据交换。

客户端c++ udp 必须是先发送后接受吗
首先要标识一个UDP,只需要一个IP地址,和一个端口号。这两个东西可以唯一标识一个UDP-Socket(如果你是用Socket编程的话,先假定你用的是Socket。)你说有一个客户端和服务端,而要实现这两端的通信,其实很简单。你的条件是服务端已开启,客户端就有接收吗?这样的话,你可以在开始通信时,先跑...

相似回答