0

我使用这个函数通过套接字运行我的服务器:

def run(self):
    # The 'main' function
    print 'Running ... '
    Running = True
    while Running:
        InList,OutList,ExceptList = select.select(self.Connections,[],[])
        for Connection in InList:
            if Connection == self.Server:
                # Server got a new connecting Client
                User, Adress = self.Server.accept() # New User Connection
                Data = {'User':User,'Adress':Adress}
                self.Connections.append(Data) # Store the new User Connection
                print 'User ', Data, ' connected'
            else:
                # Some other Socket got data for the Server
                Data = Connection.recv(1024)
                if not Data:
                    print 'No new Data!'
                    break

                print Data     

但是,在发送数据时,我在第 23 行(即 select() 行)上收到此错误:TypeError: argument must be an int 或具有 fileno() 方法。

查找手册和这些示例(http://code.activestate.com/recipes/531824-chat-server-client-using-selectselect/http://ilab.cs.byu.edu/python/select/echoserver .html ) 我看不出有什么区别,也不明白为什么我不能工作。self.Connections 仅包含服务器套接字,当使用 print self.Connections 时,它给了我:

[<socket._socketobject object at 0x020B6BC8>]

声明,这是我传递给 select() 的列表,应该是正确的。

我究竟做错了什么?谢谢!

4

1 回答 1

1

第一次select.select运行,没有问题,因为self.Connections只包含一个socket对象,完全有效。

然而,在第二次while循环中,self.Connections又获得了另一个元素:在块Data中构造的字典。if Connection == self.Server:那个字典不是整数,也没有fileno方法,所以select.select看到它就会抱怨。

于 2013-11-12T19:18:37.313 回答