我正在向自己介绍 C/C++ 中的套接字编程,并且正在使用send()
并recv()
通过套接字在客户端和服务器程序之间交换数据TCP
。
以下是我的代码的一些相关摘录:
服务器.c:
char recv_data[1024];
// Socket setup and so on ommited...
bytes_recieved = recv(connected, recv_data, 1024, 0);
recv_data[bytes_recieved] = '\0';
客户端.c:
char send_data[1024];
// Setup ommited...
send(connected, send_data, strlen(send_data), 0);
它recv()
本身是否提供任何防止缓冲区溢出的保护?例如,如果我将第三个参数更改recv()
为高于所指向的缓冲区recv_data
(例如 4000)的值 - 这会导致缓冲区溢出吗?(我实际上已经尝试过这样做,但似乎无法触发段错误)。
我实际上是在尝试创建一个故意易受攻击的服务器程序来更好地理解这些问题,这就是为什么我试图通过recv()
.
修正:
并非不相关,将找出为什么上面会发送client.c
超过. 我用来从标准输入填充该缓冲区,但如果我通过标准输入输入超过 1024 个字节,程序将显示它接收到所有字节!:)。for不限制发送的字节数吗?1024
strlen(send_data)
gets(send_data)
server.c
strlen(send_data)
send()