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

时间:2015-12-05 04:26:40

标签: c sockets serversocket

我无法通过sock_stream连接一次发送一个字符串,一个字符。原因是我试图一次发送多个字符串,这些字符串接近70000个字符。我试图使用的写函数似乎需要一个字符串。

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;
    }
}

另外,我怎么读这个?这就是我尝试它的方式。

{{1}}

我该如何实现?谢谢。

2 个答案:

答案 0 :(得分:1)

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

那么你可以做些什么:

TCP_NODELAY

类似地,你应该尝试进行批量读取,因为除非你有一个非常正确的理由,否则一次读取一个字符太慢。每次你写或读,它的系统调用都是昂贵的。

因此,对于阅读,您可以尝试类似

的内容

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

和read_bytes将具有您已读取的确切值。

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

答案 1 :(得分:0)

您需要更改行

FAILED: SemanticException Recursive cte cteCalculation detected (cycle: ctecalculation -> cteCalculation).

write(sockfd,plaintext[i],1);

此外,您可以使用

write(sockfd,&plaintext[i],1);

启用setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int)); 选项。