【发布时间】:2014-10-14 10:17:36
【问题描述】:
首先,我在套接字编程方面完全是个菜鸟,所以请告诉我你是否认为我做错了什么。
所以,我一直在尝试为一个简单的 fps 游戏编写一个 udp 服务器。
在本地网络上一切正常,但是如果我尝试在 Internet 上使用我的代码,我确实会遇到一些问题。我的服务器可以接收来自客户端白化问题的数据,并且可以向客户端发送数据,如果它发送的端口在客户端上是打开的,如果不是,客户端将不会接收任何数据。 (服务器上的端口全部打开)。我现在的问题是,有没有什么方法可以在不需要打开/转发端口的情况下通过 Internet 接收数据?
(client()函数不断循环重复)
我的接收数据代码如下:
import socket
server_IP = 'ip of server'
Client_port = 3560
Server_port = 5000
Client_socket = None
First_run = True
first = True
def client():
global server_IP
global Client_port
global Server_port
global Client_socket
global first
if first == True:
try:
local = ('', Client_port)
host = (server_IP, Server_port)
Client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Client_socket.bind(local)
Client_socket.setblocking(False)
first = False
except:
print("Failed")
try:
data, connection = Client_socket.recvfrom(512)
except socket.error:
return
if data:
#irrelevant code handling the data...
服务器发送代码是这样锁定的:
import socket
server_socket = None
server_port = 5000
Data_Port = 3560
print("importing the socket...")
try:
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
except socket.error as msg:
server_socket = None
try:
server_socket.bind(("", server_port))
except socket.error as msg:
server_socket.close()
server_socket = None
if server_socket is None:
print('could not open socket')
ret = False
server_socket.sendto(Data_to_Send, ('client ip here',Data_Port))
ofc 这只是代码的一部分,但我想它是相关的。 如果在我发送/接收数据的方式中不需要打开/转发端口就无法接收数据,请建议一种可以做到这一点的方法,如果有的话。
【问题讨论】:
标签: python sockets python-3.x port