首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript - PHP Websocket -获取用户IP地址

问Javascript - PHP Websocket -获取用户IP地址
EN

Stack Overflow用户
提问于 2021-07-16 01:41:55
回答 1查看 37关注 0票数 0

我在试着做个游戏。

但是,我无法在php端获得用户的ip地址。

我使用的是普通的websocket。

我尝试了以下代码,但它不能给我想要的东西。服务器提供ip地址。

JAVASCRIPT

代码语言:javascript
复制
websocket = new WebSocket("wss://site.com/game_play/"); 
websocket.binaryType = "arraybuffer";
websocket.onopen = function(event) { 
    
    var send = {
        type: "sign",
        oauth: g_oauth,
        room: g_room,
    };
    websocket.send(binary_encode(send));
}
.....

PHP

代码语言:javascript
复制
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 1, 'usec' => 0));
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => 1, 'usec' => 0));
socket_bind($socket, 0, $port);

socket_listen($socket);
.....

阿帕奇

代码语言:javascript
复制
ProxyPass /game_play/ ws://site.com:8090/server.php
ProxyPassReverse /game_play/ ws://site.com:8090/server.php

socket_getsockname,socket_getpeername

我尝试了一些函数,但没有成功。因为服务器提供了ip地址。我正在尝试获取用户ip地址。

EN

回答 1

Stack Overflow用户

发布于 2021-07-16 01:54:47

根据docs,您可能需要使用socket_accept()而不是socket_connect()

注意: socket_getsockname()不应与使用socket_connect()创建的AF_UNIX套接字一起使用。只有使用socket_accept()创建的套接字或调用socket_bind()后的主服务器套接字才会返回有意义的值。

编辑:调用了错误的函数,应为socket_getpeername()

无论哪种方式,socket_getpeername()中的第二个参数都是通过引用传递的,如果套接字正常,它将包含客户端IP:

代码语言:javascript
复制
<?php 
....
socket_listen($socket);

$address = '';
socket_getpeername($socket, $address); //$address is passed by reference and will contain the remote IP. 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68398525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档