0

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

这就是问题。我已经创建了一个侦听端口 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"
4

1 回答 1

0

我要回答它,因为我得到了一些帮助并弄清楚了。

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

另一种方法是将 SocketServers 与 StreamingRequestHandler 一起使用。虽然这对于典型服务器的使用来说是理想的,但如果涉及很多对象,它可能会降低灵活性。

于 2013-07-11T10:09:54.077 回答