Lost-MSth / Arcaea-server

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

Link Play #132

Closed innocentvoice closed 1 year ago

innocentvoice commented 1 year 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 1 year ago

1695955542101 This work fine for me sur

Lost-MSth commented 1 year ago

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

innocentvoice commented 1 year ago

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

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

Lost-MSth commented 1 year ago

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

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

innocentvoice commented 1 year ago

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

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

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

image

innocentvoice commented 1 year ago

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

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

Lost-MSth commented 1 year ago

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

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

innocentvoice commented 1 year ago

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

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

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

Lost-MSth commented 1 year ago

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

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

innocentvoice commented 1 year ago

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

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

image

innocentvoice commented 1 year ago

image TCP Only...

innocentvoice commented 1 year ago

image image

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

Lost-MSth commented 1 year 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 1 year 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 1 year ago

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

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