gpt4 book ai didi

c - 如何通过 sock_stream 一次发送一个字符的字符串

转载 作者:行者123 更新时间:2023-11-30 15:14:21 25 4
gpt4 key购买 nike

我在通过 sock_stream 连接发送字符串(一次一个字符)时遇到问题。原因是我试图一次发送多个字符串,这些字符串接近 70000 个字符。看来我尝试使用的写入函数需要一个字符串。

for(i=0;i<BUF_SIZE;i++)
{
write(sockfd,plaintext[i],1);
if(plaintext[i]=='0')
break;
}
write(sockfd,'^',sizeof(char));

另外,我该如何阅读这个?这是我尝试的方法。

int read_line(int fd,char message[])
{
size_t message_len=0;
while (message_len<BUF_SIZE)
{
char c;
int ret = read(fd, &c, 1);
if (ret < 0)
{
message[message_len] = 0;
return len; // EOF reached
}
if (c == '^')
{
read(fd,&c,1);
message[message_len] = 0;
return message_len; // EOF reached
}
data[len++] = c;
}
}

我将如何实现这个?谢谢。

最佳答案

write api 的签名是:int write(int fd, const void *buf, size_t nbyte);

那么你可以做什么:

#define BUF_SIZE 70000
char *buf = (char*)malloc(BUF_SIZE);
int written = 0;
int wrote;
if (buf)
memset(buf, 1, BUF_SIZE);
else
return written;//some error code

while (written < BUF_SIZE)
{
wrote = write(fd, buf, BUF_SIZE);
if (wrote < 0)
return written;
written += wrote;
}

同样,您应该尝试进行批量读取,因为一次读取一个字符太慢,除非您有非常充分的理由。每次你写或读时,它的系统调用都是昂贵的。

因此,为了阅读,您可以尝试类似的方法

int read_bytes = read(fd, buf, BUF_SIZE);

和 read_bytes 将具有您已阅读量的准确值。

然后执行parse_buf(buf),您可以在其中找到您要查找的标签,然后保存其余部分以备将来获取更多数据,否则如果您获取的数据较少,则再次调用read。

关于c - 如何通过 sock_stream 一次发送一个字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34101271/

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