【问题标题】:php socket programming issue: Connection reset by peerphp套接字编程问题:对等方重置连接
【发布时间】:2016-02-29 18:38:09
【问题描述】:

我有一个 php 应用程序,它使用套接字连接到一个 java 应用程序。在 java 应用程序中,我们将超时设置为 10 秒。

我有大量数据需要在应用程序中间进行处理。因此,当我在处理后尝试使用套接字时,我收到对等方重置连接的套接字错误。

现在,当我尝试关闭(socket_shutdown)连接并重新打开连接时,收到错误传输端点未连接到 socket_send,socket_receive。非常感谢有关此问题的任何指导。

注意:我正在尝试使用单例方法进行套接字连接。

【问题讨论】:

  • 你能提供一些你从 PHP 连接到你的服务器的代码吗?猜猜是,当您的客户端执行“socket_shutdown”时,您尝试向 java 服务器端发送“thx and goodbye”,这是不可能的,因为连接已经从服务器端丢失/拒绝
  • connection reset by peer 的一个常见原因是关闭套接字而不读取客户端发送的内容。但是如果没有看到您的代码,就不可能说出问题可能是什么。
  • 如何在处理数据时保持套接字处于活动状态?

标签: java php sockets websocket


【解决方案1】:

我在我的 PHP 应用程序中使用大量套接字连接 [每秒 10 个不同的 PHP Apache 线程到我自己编写的 C++ 服务器]。

这是我在 PHP 中使用的代码,它可以工作:

$sIP = gethostbyname('MyDomain');

# create the socket
$iSocket = socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
if ($iSocket === FALSE )
{
    writeLogFile(sprintf("socket_create() failed: %s",
                    socket_strerror(socket_last_error())));
    exit;
}

# load some default values from the app table
$iTimeOut = 180
$iPort = 11211;

socket_set_option($iSocket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => $iTimeOut, "usec" => 0));
$iResult = socket_connect($iSocket, $sIP, $iPort);

if ( $iResult === FALSE )
{
    $sError = sprintf("<br>socket_connect(%d) failed with code %d: %s",
                    $iSocket, $iResult, socket_strerror(socket_last_error($iSocket)));
    writeLogFile($sError);
    die($sError);
    exit;
}

# $sHttpParameter has the value which has to be sent over the socket
socket_write($iSocket, $sHttpParameter, strlen($sHttpParameter));
# for my purpose the answer is just an OK/FAILED
$sAnswer = socket_read($iSocket, 1000);     
socket_close($iSocket);

您确定问题不在于 JAVA 应用程序吗?

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 2017-03-30
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2018-08-01
    • 1970-01-01
    相关资源
    最近更新 更多