Lost-MSth / Arcaea-server

一个微型的 Arcaea 本地服务器 A small local server for Arcaea
MIT License
358 stars 53 forks source link

Link Play #132

Closed innocentvoice closed 11 months ago

innocentvoice commented 11 months ago

Describe the bug 问题描述 5.0.1c Link Play 错误

To Reproduce 复现过程 Steps to reproduce the behavior:

  1. Open Arcaea
  2. Select Link Play
  3. Error

Error log 报错日志

[Error] No error logs.

Screenshots 截图 Screenshot_20230929-080751_Arcaea

Environment 环境

Additional context 附加内容

ZephyrAurora commented 11 months ago

1695955542101 This work fine for me sur

Lost-MSth commented 11 months ago

无法复现,我能想到的可能原因是 nginx 反代导致服务端无法自动获取对外地址,设置一下 LINKPLAY_DISPLAY_HOST 试试

innocentvoice commented 11 months ago

无法复现,我能想到的可能原因是 nginx 反代导致服务端无法自动获取对外地址,设置一下 LINKPLAY_DISPLAY_HOST 试试

我需要在前面加上 "https://” 吗,还是只需要 "xxx.xxx" 就可以了?

Lost-MSth commented 11 months ago

不需要 http,那是 TCP 协议下的,Link Play 走的是 UDP 协议,socket pair 就是 (IP, PORT),不是什么网址 URL

所以填个 IP 就行,域名可能也行(如果是用 CDN 代理域名的话可能需要设置别的什么(?))

innocentvoice commented 11 months ago

不需要 http,那是 TCP 协议下的,Link Play 走的是 UDP 协议,socket pair 就是 (IP, PORT),不是什么网址 URL

所以填个 IP 就行,域名可能也行(如果是用 CDN 代理域名的话可能需要设置别的什么(?))

我使用nginx反向代理,把服务器地址从本地主机改到我的域名。但无论是填写IP地址还是域名地址,都无法正常工作。

image

innocentvoice commented 11 months ago

我甚至关闭了Cloudflare CDN,但仍然无法正常工作… image

该房间可以被创建,但无法加入。

Lost-MSth commented 11 months ago

如果域名的解析使用 cloudflare,那域名应该是不行的,我记得 cloudflare 并不提供 UDP 转发功能,它的 DNS 记录给的是 cloudflare 的 IP

nginx 没有反代 UDP 端口吧,等会,我看到是 Linux,这是有公网 IP 的云服务器?那服务器控制台的端口开放了吗,一般有防火墙来着

innocentvoice commented 11 months ago

如果域名的解析使用 cloudflare,那域名应该是不行的,我记得 cloudflare 并不提供 UDP 转发功能,它的 DNS 记录给的是 cloudflare 的 IP

nginx 没有反代 UDP 端口吧,等会,我看到是 Linux,这是有公网 IP 的云服务器?那服务器控制台的端口开放了吗,一般有防火墙来着

是的,这个是个云服务器。我已经用 ufw 打开了10900和10901端口,以便支持UDP和TCP连接。我甚至还在 bt.cn面板上打开了它们。

Lost-MSth commented 11 months ago

唔,控制台一般不是在云服务器运营商那边吗

UDP 不太好测试,但是你开的 10901 倒是可以测试一下,在自己电脑上 telnet [公网 IP] 10901 后随便敲几个字母回车,服务端应该有个 warning

innocentvoice commented 11 months ago

唔,控制台一般不是在云服务器运营商那边吗

UDP 不太好测试,但是你开的 10901 倒是可以测试一下,在自己电脑上 telnet [公网 IP] 10901 后随便敲几个字母回车,服务端应该有个 warning

image

innocentvoice commented 11 months ago

image TCP Only...

innocentvoice commented 11 months ago

image image

端口已打开,但没有监听。

Lost-MSth commented 11 months ago

外部很难检测 UDP 连通性的,这样吧,能测试但要改代码,linkplay_server/main.py 中开头的 UDP_handler.handle 下第一行下面加个 print(client_msg)

然后远程使用以下代码可测试:

import socket
BUFSIZE = 1024

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
    msg = input(">> ").strip()
    ip_port = ('127.0.0.1', 10900)
    client.sendto(msg.encode('utf-8'), ip_port)

client.close()

记得改掉上面的 IP,随便打点字符应该会出现在服务端窗口上

然后使用游戏客户端连连看

本机倒是可以测试端口监听,利用 netstat -ano 就行

innocentvoice commented 11 months ago

外部很难检测 UDP 连通性的,这样吧,能测试但要改代码,linkplay_server/main.py 中开头的 UDP_handler.handle 下第一行下面加个 print(client_msg)

然后远程使用以下代码可测试:

import socket
BUFSIZE = 1024

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
    msg = input(">> ").strip()
    ip_port = ('127.0.0.1', 10900)
    client.sendto(msg.encode('utf-8'), ip_port)

client.close()

记得改掉上面的 IP,随便打点字符应该会出现在服务端窗口上

然后使用游戏客户端连连看

本机倒是可以测试端口监听,利用 netstat -ano 就行

image

Public IP doesn't works, only Local IP (localhost)

Lost-MSth commented 11 months ago

emmm 看样子远程不连通,虽然我很想说是端口没开放……该不会被封端口了吧,一般不会倒是……

等一下,我看到前面有个截图日志,Link Play server 开在 127.0.0.1:10902 上对吧,这是云服务器的话,外部是不是要设置个端口转发的来着,哦对,前面您说了用 nginx 反代 http(s) 了,但是 UDP 有设置反代吗