0
我有与大量数据通信的client(php)-server(c++)
问题。服务器(C++)无法从客户端(php)接收大量数据。当客户端发送少量信息时,所有工作都很好,但是当我尝试发送大块(即〜8kb)时,我断开了通信(不知道服务器接收到了什么,因为它是后台进程)。Unix套接字发送接收客户端到服务器的大块数据错误
请,会收到以下,我使用并纠正它,如果它是可能的代码:后连接
PHP的一部分(这是送$sendbuf
):
socket_set_nonblock($fd);
$b_time = 20;
$b_tries= 0;
while($b_time)
{
if (([email protected]_connect($fd, $file))==FALSE && $b_tries > $b_time)
{
@socket_close($fd);
return false;
}
else if ($sc == true)
{
break;
}
$b_tries++;
}
$b_time=time();
while($b_time)
{
$wd=array();
array_push($wd,$fd);
if (false===($num = @socket_select($rd=NULL, $wd, $er=NULL, $select_timeout)))
{
@socket_close($fd);
return $result;
}
else
{
if ($num > 0)
{
if (false===([email protected]_write($fd, $sendbuf, strlen($sendbuf))))
{
@socket_close($fd);
return false;
}
$b_time=$tm;
$sendbuf=substr($sendbuf,$out_now);
if (!strlen($sendbuf)) break;
}
else if ((time()-$b_time)>$timeout_write)
{
@socket_close($fd);
return false;
}
}
}
//然后从服务器,如果确定接收答案,但没有答案。
C++ PART:
int Socket::receive (std::string& s) const
{
if (current_socket < 0) return false; // error socket failed!
char buf [1025];
memset(buf, 0, 1025);
// cleanup string
s = "";
int done = 0;
int status_or_nbytes = 0;
char* pch;
do {
status_or_nbytes = ::recv (current_socket, buf, 1024, 0);
if (status_or_nbytes == 1024)
{ // not all message readed, instead last byte is not SPECIAL_CHAR
if (buf[1023] == 26)
{
//std::cout << "S 26! " << std::endl;
buf[1023] = '\0';
done = 1;
}
s += buf;
}
else if (status_or_nbytes > 0) // < 1024
{
if (buf[status_or_nbytes-1] == 26)
{
buf[status_or_nbytes-1] = '\0';
done = 1;
}
s += buf;
}
if (status_or_nbytes <= 0)
{
done = 1;
}
} while (!done);
if (status_or_nbytes == -1)
{
std::cout << "ERROR1" << std::endl;
return 0;
}
else
{
return 1;
}
}
您可以收到最大。 1025字节,所以当你发送更多时它将不起作用。 – LMF 2014-11-22 14:55:25
@LMF为什么我只能收到1025?我使用'do-while'从客户端合并缓冲区(1025)中的数据块并将其存储到字符串's'?代码中的错误在哪里?谢谢 – abrahab 2014-11-22 15:00:59