2009-08-20 65 views
4

我写了这段代码。发生了Python插座错误

import socket 

host = 'localhost' 
port = 3794 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 
s.bind((host, port)) 
while 1: 
     print 'Type message you want to send...' 
     msg = raw_input() 
     if msg == '': 
       s.close() 
       break 
    s.sendall(msg) 

然后执行此代码。

Traceback (most recent call last): 
    File "socket.py", line 11, in ? 
    s.bind((host, port)) 
    File "<string>", line 1, in bind 
socket.error: (99, 'Cannot assign requested address') 

怎么了?

你知道解决方案吗?

+0

我试过它说的代码:UDP套接字没有sendall()方法。 – 2009-08-20 10:02:41

+1

我执行的代码,它运行良好(虽然没有套接字侦听)。但's.sendall(msg)'中的缩进是错误的。 – ramosg 2009-08-20 10:09:14

+0

@ffffff,请告诉我们完整的代码,特别是指定您的端点的位置(通过connect())。在py2.4下,使用EDESTADDRREQ(“需要的目标地址”)对此失败。 – pilcrow 2009-08-20 13:59:48

回答

9

这意味着你已经有一个绑定到3794端口的套接字。

它可能是另一个应用程序,或者它意味着在上次运行自己的脚本之后尚未释放端口(如果脚本以不正确方式终止,它会发生)。

只需尝试使用另一个端口号 - 我相信一切都会正常工作。

4

我有这个相同的问题,它是由试图听错主机引起的。当我将其更改为实际与代码在本地主机上运行的机器相关联的IP时,问题就消失了。

0

出现此错误的主要原因是端口已被其他应用程序/服务使用。 选择注册端口范围以上的端口号,即49151