我在试着做个游戏。
但是,我无法在php端获得用户的ip地址。
我使用的是普通的websocket。
我尝试了以下代码,但它不能给我想要的东西。服务器提供ip地址。
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
$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);
.....阿帕奇
ProxyPass /game_play/ ws://site.com:8090/server.php
ProxyPassReverse /game_play/ ws://site.com:8090/server.phpsocket_getsockname,socket_getpeername
我尝试了一些函数,但没有成功。因为服务器提供了ip地址。我正在尝试获取用户ip地址。
发布于 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:
<?php
....
socket_listen($socket);
$address = '';
socket_getpeername($socket, $address); //$address is passed by reference and will contain the remote IP. https://stackoverflow.com/questions/68398525
复制相似问题