php 调用 tcp 接口,PHP进行tcp连接

本篇文章给大家分享的内容是PHP进行tcp连接,有着一定的参考价值,有需要的朋友可以参考一下

原生PHP的写法。$host = '服务端IP'; $port = 端口号; $timeout = 5; $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (socket_connect($socket, $host, $port) === false) { // 创建连接

socket_close($socket); $message = 'create socket error'; throw new Exception($message, socket_last_error());

}

if (socket_write($socket, $buffer) === false) { // 发包

socket_close($socket); $message = sprintf("write socket error:%s", socket_strerror(socket_last_error())); throw new Exception($message, socket_last_error());

}

socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, $timeout); $rspBuffer = socket_read($socket, 65536); // 接收回包

socket_close($socket);

使用swoole的写法。$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);$ret = $client->connect('

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP 读取 TCP socket 时没有数据返回,可能存在以下几个原因: 1. 服务器尚未发送任何数据:在客户端连接到服务器后,服务器可能需要一些时间来处理请求并准备响应。如果服务器尚未发送任何数据,`socket_read` 函数将会阻塞等待数据到达。你可以增加超时时间或使用非阻塞模式来处理这种情况。 2. 数据尚未完整发送:服务器可能会分多次发送响应数据。如果服务器只发送了部分数据,并且 `socket_read` 函数被调用时没有更多数据可读取,那么函数将会返回空字符串。在这种情况下,你需要等待服务器继续发送数据,并再次调用 `socket_read` 函数来读取剩余的数据。 3. 数据格式不正确:如果服务器返回的数据不是预期的文本格式,可能会导致读取失败。请确保正确解析服务器返回的数据,并根据实际情况进行处理。 为了更好地排除问题,可以使用以下方法来调试: - 在调用 `socket_read` 函数之前,可以使用 `socket_set_option` 函数设置超时时间,例如 `socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 5, 'usec' => 0));` 将超时时间设置为 5 秒,以避免长时间阻塞等待。 - 在调用 `socket_read` 函数后,你可以使用 `socket_last_error` 函数检查错误码,以确定是否有错误发生。例如,如果返回值为 11,则表示资源临时不可用,可能是因为没有更多数据可读取。 如果问题仍然存在,请确保服务器端正在正确地发送数据,并且尝试使用其他网络工具连接到服务器来验证服务器的行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值