2009-08-20 3 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(). –

+1

Я выполнил этот код, и он работает нормально (хотя прослушивание сокетов не выполняется). Но отступ неправильный в 's.sendall (msg)'. – ramosg

+0

@ffffff, пожалуйста, покажите нам полный код, в частности, где вы указываете свою конечную точку (например, connect()). В разделе py2.4 это для меня не работает с EDESTADDRREQ («Требуется адрес назначения»). – pilcrow

ответ

9

Это означает, что у вас уже есть разъем, связанный с портом 3794.

Это может быть другое приложение, или это означает, что порт не был выпущен еще после предыдущего запуска вашего собственного скрипта (это происходит, если скрипт завершен ненадлежащим образом).

Просто попробуйте использовать другой номер порта - я считаю, что все будет работать нормально.

4

У меня была эта же проблема, и это было вызвано попыткой прослушивать неправильный хост. Когда я изменил его на IP-адрес, который был фактически связан с машиной, на которой был запущен код (localhost), проблема исчезла.

0

Эта ошибка возникает в основном из-за того, что порт уже используется другим приложением/службой. Выберите номер порта над диапазоном зарегистрированных портов, то есть 49151

Смежные вопросы