gpt4 book ai didi

c++ - 如何停止从套接字C/C++接收数据

转载 作者:行者123 更新时间:2023-11-28 07:56:04 25 4
gpt4 key购买 nike

关键是我发送了 4096 字节,但大约只有 119 字节。携带有用的信息。

这 100 个字节以\r\n\r\n 结尾,所以在客户端中,当我读取\r\n\r\n 时,我想停止从该字符串接收信息,并重新开始。

我不知道我是否必须冲洗,或关闭 socket ,或其他什么...

它们是套接字 TCP。

客户端我这样做:

 buf details[4096];
strcpy(details,"1");
strcat(details,"10/04/12");
strcat(details,"Kevin Fire");
strcat(detils,"abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde\r\n\r\n");
nbytes_sent = send(sock,(char *)details,sizeof(details),0);

另一方面,服务器...

char buf[20];
memset(buf,'\0',20);

while(!end){
nbytes_read=recv(sclient,(char *)ress,sizeof(ress),0);

if(strcmp(ress,"1")==0){
printf("Details: %s (%i)\n",buf,nbytes_read);
while(strcmp(buf,"\r\n\r\n") != 0){
nbytes_read=recv(sclient,(char *)buf,sizeof(buf),0);
cout.flush();
printf("Details: %s (%i)\n",buf,nbytes_read);
} }
if(strcmp(buf,"\r\n\r\n")==0) printf("The End\n");
cout.flush();
}
}

我只想读取一个新的“ress”,而不是检索其余无用的字节。

提前致谢。

最佳答案

如果你的意思是你想丢弃其余的数据并读取一个新 block 你不能用 TCP 来做,因为它是面向流的并且没有消息的概念并且不知道你的消息的其余部分想忽略。如果您还有其他意思,请详细描述。

但除此之外,为什么您使用 nbytes_sent = send(sock,(char *)details,sizeof(details),0); 当只有 \r\n' 之前的数据很重要时.您可以使用 nbytes_sent = send(sock,(char *)details,strlen(details),0);` 只发送有效数据并减少您通过网络发送的垃圾,您不需要重新开始在服务器中??

关于c++ - 如何停止从套接字C/C++接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12696890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com