gpt4 book ai didi

c - 从套接字读取在最后一个字节停止

转载 作者:行者123 更新时间:2023-11-30 17:27:47 25 4
gpt4 key购买 nike

服务器.c

bytesReceived = 0;
char buff[256];
char* buffFile;
char tempbuff;
bytesReceived = read(clnt_fd, &tempbuff, 1);
buffFile = (char*)malloc(sizeof(char));
buffFile[0]=tempbuff;
long incr=1;
while(bytesReceived > 0 )
{

bytesReceived = read(clnt_fd, &tempbuff, 1);
incr++;
buffFile = (char*)realloc(buffFile, sizeof(char)*incr);
buffFile[incr-1]=tempbuff;

}

客户端.c

char filebuff[20];
strcpy(filebuff, "UPC ");
strcat(filebuff, file_size); //it's the file size
strcat(filebuff, " ");

write(clnt_fd, filebuff, strlen(filebuff));


while(1)
{
int nread = fread(file_bytes,1,256,fp);
bytesSent = write(clnt_fd, file_bytes, nread);

if(bytesSent<0)
{
printf( "Error: %s\n", strerror( errno ) );
break;
}
if(nread<256)
{
char t='\n';
bytesSent = write(clnt_fd, &t, 1);
break;
}

}

所以基本上,客户端将发送这样的消息,我必须将“\n”作为最后一个字节。

UPC 5624 bytesbytesbytesetcetc\n

服务器应接收我放入数组中的那些字节,以便对其进行标记并从数组中获取这些字节以将其写入文件中。问题是,我做了一个计数器,我看到从客户端发送了多少字节,以及每次循环结束时接收了多少字节,并且我检查了最后一个字节,我的服务器阻塞了读取函数并卡在那里。有什么想法吗?

最佳答案

我并不是真正的 C++ 人员,但似乎在进入 while 循环之前,您执行了“读取”。当你进入循环时再次执行“read”,这看起来有点奇怪。

同时执行“incr++;”在 while 循环范围的底部。因为你已经从偏移量 1 开始了。在您读取/使用 incr 之前,您已经增加了 incr 。然后你不必在缓冲区数组中执行 incr-1 (因为你在 while 循环的第一次迭代中也错过了 bufFile[0] 的第一个元素)

只是提一下,不知道这能解决你的问题(用手机键盘回答这个问题...)

关于c - 从套接字读取在最后一个字节停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26265385/

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