【问题标题】:Python Socket timeout errorPython 套接字超时错误
【发布时间】:2012-10-16 01:14:21
【问题描述】:

我正在 Python 2.7 中编写一个非常简单的 udp 套接字连接

服务器端已启动并正在运行。 我在客户端遇到了麻烦。

from socket import *

serverName = '127.0.0.1'
serverPort = 5444
counter = 1;

while counter < 55:
    mySocket = socket(AF_INET,SOCK_DGRAM)

    try:
        mySocket.settimeout(1.0)
        message = raw_input('')
        mySocket.sendto(message,(serverName, serverPort))
        modifiedMessage, serverAddress = mySocket.recvfrom(1024)
    except mySocket.timeout:
        print 'Request timed out!'
        mySocket.close()
    else:   
        print 'Server Response:  '
        print modifiedMessage   

    mySocket.close()

我收到以下错误。 除了 mySocket.timeout: AttributeError: '_socketobject' 对象没有属性 'timeout'

看不懂怎么没有timeout属性?!

其实我看的是智能感知,也没有这个属性。

任何建议将不胜感激

【问题讨论】:

标签: python attributes timeout attributeerror


【解决方案1】:

socket 模块有一个timeout 类。您的套接字对象mysocketsocket.socket 类型)没有timeout 属性。

试试这个:

except timeout:
    print 'Request timed out!'
    mySocket.close()

请注意,您还应该小心以这种方式使用import *

【讨论】:

  • 哇,非常感谢jozzas。这正是我所需要的。
【解决方案2】:

我有 python 2.7,它适用于 ipython

Launching python -O
Python 2.7.2 (default, Apr 17 2012, 22:01:25) 
Type "copyright", "credits" or "license" for more information.

IPython 0.13 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: from socket import *

In [2]: mySocket = socket(AF_INET, SOCK_DGRAM)

In [3]: mySocket.

mySocket.accept         mySocket.dup            mySocket.getsockopt     mySocket.recv           mySocket.sendall        mySocket.shutdown
mySocket.bind           mySocket.family         mySocket.gettimeout     mySocket.recv_into      mySocket.sendto         mySocket.type
mySocket.close          mySocket.fileno         mySocket.listen         mySocket.recvfrom       mySocket.setblocking    
mySocket.connect        mySocket.getpeername    mySocket.makefile       mySocket.recvfrom_into  mySocket.setsockopt     
mySocket.connect_ex     mySocket.getsockname    mySocket.proto          mySocket.send           mySocket.settimeout     

In [3]: mySocket.
mySocket.accept         mySocket.dup            mySocket.getsockopt     mySocket.recv           mySocket.sendall        mySocket.shutdown
mySocket.bind           mySocket.family         mySocket.gettimeout     mySocket.recv_into      mySocket.sendto         mySocket.type
mySocket.close          mySocket.fileno         mySocket.listen         mySocket.recvfrom       mySocket.setblocking    
mySocket.connect        mySocket.getpeername    mySocket.makefile       mySocket.recvfrom_into  mySocket.setsockopt     
mySocket.connect_ex     mySocket.getsockname    mySocket.proto          mySocket.send           mySocket.settimeout     

In [3]: mySocket.set
mySocket.setblocking  mySocket.setsockopt   mySocket.settimeout   

In [3]: mySocket.set
mySocket.setblocking  mySocket.setsockopt   mySocket.settimeout   

In [3]: mySocket.settimeout(1.0)

In [4]: 

【讨论】:

  • 感谢 ronak 的意见。你有什么建议为什么它对我不起作用?
猜你喜欢
  • 2012-08-05
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
相关资源
最近更新 更多