linux中的套接字编程:send()

linux中的套接字编程:send(),linux,network-programming,Linux,Network Programming,我是LinuxEnv中socket编程的初学者 代码是: void proccess_server(int s) { ssize_t size =0 ; char buffer[1024]; for(;;) { printf("proccess:%d proccessing socket :%d\n",getpid(),s); size = recv(s,buffer,sizeof(buffer),0); if(

我是LinuxEnv中socket编程的初学者

代码是:

void proccess_server(int s)
{

    ssize_t size =0 ;
    char buffer[1024];
    for(;;)
    {
        printf("proccess:%d proccessing socket :%d\n",getpid(),s);
        size = recv(s,buffer,sizeof(buffer),0);

        if(0 == size)
          return ;
        sprintf(buffer,"Response from server:%d,%d bytes altogether\n",getpid(),size);

        send(s,buffer,strlen(buffer)+1,0);
    }

}
我不明白为什么在
send()
中添加另一个字节
(strlen(buffer)+1)
send中(s,buffer,strlen(buffer)+1,0)


请帮帮我

在C语言中,编译器在每个字符串的末尾放置一个\0(NULL)字符。所以当你们使用一个字符串时,计算机可以理解该字符串的结尾。在Pascal语言示例中,编译器在字符串前面放置一个字节以存储字符串的长度


这一定是有+1的原因。

我明白了,我知道字符串的末尾会有一个\0,因为问题是,+1表示函数strlen()返回字符串的长度不包括\0?是的,没错。如果字符串是“abc”,strlen(“abc”)是3,但内存长度是4。这段代码全错了,你在哪里找到的?它不检查错误条件(大小==-1),并且它希望“缓冲区”在没有检查的情况下以null终止,因此它有一个安全缺陷。呃..这是一个简单的教程,展示了我的教科书中的网络编程api。如果我想修复它,我应该在接收数据之前用\0填充缓冲区吗?是的,并且您应该最多recv sizeof(buffer)-1字节。