Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让Python游戏服务器套接字对外界可见?_Python_Server - Fatal编程技术网

让Python游戏服务器套接字对外界可见?

让Python游戏服务器套接字对外界可见?,python,server,Python,Server,如何通过我的80.xxx.xxx.xxx ip(从internet)连接 我的端口已启用,但游戏客户端在80.xxx.xxx.xxx ip上看不到任何服务器。我认为问题在于服务器代码 注意:游戏客户端-服务器连接在局域网上运行良好,但不能在互联网上运行 服务器: import\u线程作为线程 导入套接字 导入时间 进口泡菜 导入IP地址 客户端={} clientInfo={} 连接={} def startServer(nPort): IP='192.168.0.10' 端口=nPort s

如何通过我的80.xxx.xxx.xxx ip(从internet)连接

我的端口已启用,但游戏客户端在80.xxx.xxx.xxx ip上看不到任何服务器。我认为问题在于服务器代码

注意:游戏客户端-服务器连接在局域网上运行良好,但不能在互联网上运行

服务器:

import\u线程作为线程
导入套接字
导入时间
进口泡菜
导入IP地址
客户端={}
clientInfo={}
连接={}
def startServer(nPort):
IP='192.168.0.10'
端口=nPort
serverSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
绑定((IP,端口))
serverSocket.setblocking(0)
打印(“服务器连接”+str(IP)+“端口”+str(端口))
返回服务器套接字
addSocketTransport
def运行服务器(服务器):
recv(服务器)
def recv(服务器):
end=time.time()
开始=时间。时间()
ping=0
r=“”
全球客户
server.settimeout(0)
虽然(正确):
对于范围(0,len(客户端)+1)内的i:
尝试:
(r,address)=server.recvfrom(9293)
r=酸洗负荷(r)
如果地址不在客户机中:
addClient(地址)
客户机[地址]=r
ping=整轮((time.time()-开始)*1000,3)
开始=时间。时间()
clientInfo[地址]['lastPing']=time.time()
clientInfo[地址]['ping']=ping
clientInfo[地址]['timeout']=0.0
除:
通过
对于客户端中的c:
client=clientInfo[c]
客户端['timeout']=round(float(time.time()-client['lastPing'])*1000,3)
如果客户端['timeout']>5000:
打印(“客户端超时”)
断开连接客户端(c)
打破
打印(“跟随中断”)
def发送(客户端套接字):
全球客户
虽然(正确):
时间。睡眠(.05)
客户地址:
客户=客户[地址]
clientSocket.sendto(pickle.dumps(客户端),地址)
def addClient(地址):
打印(str(“客户添加”))
客户端[地址]={}
clientInfo[地址]={}
clientInfo[地址]['timeout']=0.0
clientInfo[地址]['lastPing']=time.time()
打印(str(“客户:)+str(客户))
def断开连接客户端(地址):
打印(str(“断开”)+str(地址))
del客户[地址]
打印(“客户端断开连接”)
go=错误
打印(“应使用哪个端口(按enter键选择默认的9293端口)”)
而go==False:
端口=输入(“端口:”)
尝试:
端口=int(端口)
如果端口>=1024:
正确
其他:
打印(“端口可能大于1024”)
除:
通过
如果端口==“”:
端口=9293
打印(“网关端口9293”)
正确
#线程。启动新线程(打印(“线程2”,“你好”))
尝试:
serverSocket=startServer(端口)
线程。启动新线程(recv,(serverSocket,))
线程。启动新线程(发送,(服务器套接字,)
打印(“服务器已启动”)
例外情况除外,如e:
打印(str(e))
killServer=输入(“服务器关闭?(y/n)”)
#

#thread.start\u new\u thread(send),(serverSocket))
'192.168.0.10'-这是私有IP() 如果您想让您的服务器在internet上可见,您应该在路由器上配置NAT(仅当您的WAN地址是公共的时)()


怎么做?简单-您必须通过webrowser登录路由器,找到NAT配置并“说”如果您从1234端口的internet camo中有任何想法,您应该将其发送到192.168.0.10:nPort

好的,我自己解决了,谢谢你们两位帮助我! 只是防火墙阻止了我的数据包


再次感谢你

可能必须使用端口9293打开(或转发)防火墙上的端口80,并且它已经在192.168.0.10上打开/转发。我想使用192.168.0.10 ip自动检测我的外部ip:80.xxx.xxx.xxx,就像我认为的其他游戏服务器一样。(?)