Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Sockets_Client Server_Port - Fatal编程技术网

接收';请求字符串';用Python

接收';请求字符串';用Python,python,sockets,client-server,port,Python,Sockets,Client Server,Port,我正在用Python构建一个游戏服务器。该功能定义得非常好。服务器将侦听端口6000,远程客户端将发送请求。然后服务器将建立到客户端端口7000的连接。从那时起,客户端将继续向服务器的端口6000发送“请求”(基本上是字符串,如“UP”、“DOWN”、“SHOOT”等) 这就是问题所在。我制作了一个“服务器”,它监听端口6000。这意味着我不能将客户端绑定到同一端口。有没有一种方法可以在服务器中获取传入请求的数据字符串?到目前为止,我只有这个 我做错了什么?这个问题有什么解决办法吗?简而言之,我

我正在用Python构建一个游戏服务器。该功能定义得非常好。服务器将侦听端口6000,远程客户端将发送请求。然后服务器将建立到客户端端口7000的连接。从那时起,客户端将继续向服务器的端口6000发送“请求”(基本上是字符串,如
“UP”、“DOWN”、“SHOOT”
等)

这就是问题所在。我制作了一个“服务器”,它监听端口6000。这意味着我不能将客户端绑定到同一端口。有没有一种方法可以在服务器中获取传入请求的数据字符串?到目前为止,我只有这个

我做错了什么?这个问题有什么解决办法吗?简而言之,我可以在服务器代码中读取来自客户端的传入请求字符串吗

提前谢谢

def receive_data(self):
    errorOccured = False
    connection = None
    try:
        listener = socket.socket()  # Create a socket object.
        host = socket.gethostname()
        port = 6000               # The port that the server keeps listening to.
        listener.bind(('', port))
        # Start listening
        listener.listen(5)
        statement = ("I:P0:7,6;8,1;0,4;3,8;3,2;1,6:5,4;9,3;8,7;2,6;1,4;2,7;6,1;6,3:2,1;8,3;5,8;9,8;7,2;0,3;9,4;4,8;7,1;6,8#\n","S:P0;0,0;0#","G:P0;0,0;0;0;100;0;0:4,3,0;5,4,0;3,8,0;2,7,0;6,1,0;5,8,0;1,4,0;1,6,0#",                       "C:0,5:51224:824#","G:P0;0,0;0;0;100;0;0:4,3,0;5,4,0;3,8,0;2,7,0;6,1,0;5,8,0;1,4,0;1,6,0#","G:P0;0,1;2;0;100;0;0:4,3,0;5,4,0;3,8,0;2,7,0;6,1,0;5,8,0;1,4,0;1,6,0#")
        # This is just game specific test data
        while True:
            c, sockadd = listener.accept()    # Establish connection with client.
            print 'incoming connection, established with ', sockadd

            i = 0 # Just a counter.
            while i<len(statement):
                try:
                    self.write_data(statement[i], sockadd[0])
                    time.sleep(1) # The game sends updates every second to the clients
                    i = i + 1
                    #print listener.recv(1024) -- this line doesn't work. gives an error
                except:
                    print "Error binding client"
            c.close() # Close the connection
        return
    except:
        print "Error Occurred"
def接收_数据(自身):
ErrorOccursed=False
连接=无
尝试:
listener=socket.socket()#创建一个套接字对象。
host=socket.gethostname()
port=6000#服务器一直侦听的端口。
bind((“”,端口))
#开始听
听,听(5)
3.2;1;6;3;6;5;4;1;6;1;6;5;4;5;4;4;9;3;9;3;8;3;8;7;7;7;7;7;6;6;6;6;6;1;6;1;6;1;6;6;1;6;1;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3“C:0,5:51224:824-”,“G:P0;0,0;0;100;0:4,3,0;5,4,0;3,8,0;2,7,0;6,1,0;5,8,0;1,4,0;1,6,0”,“G:P0;0,1;2;0;100;0;0:4,3,0;5,4,0;3,8,0;2,7,0;6,1,0;5,8,0;1,4,0;1,6,0#”)
#这只是游戏特定的测试数据
尽管如此:
c、 sockadd=listener.accept()#与客户端建立连接。
打印“传入连接,已建立”,添加
i=0#只是一个计数器。

我想回答这个问题,因为我得到了一些帮助,并且找到了答案

我能做的最基本的事情就是使用客户机连接,它是
c
。在这里,我应该使用
data=listener.recv(1024)
,而不是注释行
data=c.recv(1024)
。现在它可以工作了


另一种方法是将SocketServers与StreamingRequestHandler一起使用。虽然这非常适合使用典型的服务器,但如果涉及大量对象,则可能会降低灵活性。

更新:我发现我可以使用SocketServer实现“RequestHandler”。我认为这可能会有所帮助。我建议您看看一个相当不错的Sockett服务器/客户端implementation@will-哈特:谢谢你的链接。这是一种奇怪的游戏联网方式。NAT或防火墙后面的任何人都无法在没有端口转发的情况下玩游戏……为什么服务器会打开一个到客户端的套接字?@korylprince-这个游戏应该给我们学校的计算机科学和工程专业的大三学生大学。它有这些具体的要求,他们应该了解它是如何由内而外工作的,并且应该是开放和简单的。这个想法不是要创建一个完美的游戏服务器,而是要在网络、AI和UI设计方面为学生提供一种学习体验。