linux中的套接字编程:send()
我是LinuxEnv中socket编程的初学者 代码是: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(
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字节。