2014-08-30 2 views
2

Недавно я написал код для небольшой программы чата в Python. Сокеты прекрасно соединяются при подключении их с разных терминалов в одной и той же системе. Но то же самое не происходит, когда я подключаю их с разных компьютеров, которые подключены через одну и ту же сеть Wi-Fi.Невозможно подключить сокеты Python на разных компьютерах

Вот код сервера:

#!/usr/bin/env python 

print "-"*60 
print "WELCOME TO DYNASOCKET" 
print "-"*60 

import socket, os, sys, select 

host = "192.168.1.101" 
port = 8888 
connlist = [] 

try: 
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
    print "Socket Successfully Created." 
    connlist.append(s) 
    s.bind((host,port)) 
    print "Socket Successfully Binded." 
    s.listen(10) 
    print "Socket is Now Listening." 
except Exception, e: 
    print "Error : " + str(e) 
    sys.exit() 

def air(sock,message): 
    for socket in connlist: 
     if socket != sock and socket != s: 
      try: 
       socket.sendall(message) 
      except: 
       connlist.remove(socket) 

while 1: 
    read_sockets,write_sockets,error_sockets = select.select(connlist,[],[]) 
    for sock in read_sockets: 
     if sock == s: 
      conn, addr = s.accept() 
      connlist.append(conn) 
      print "Connected With " + addr[0] + " : " + str(addr[1]) 
     else: 
      try: 
       key = conn.recv(1024) 
       print "<" + str(addr[1]) + ">" + key 
       data = raw_input("Server : ") 
       conn.sendall(data + "\n") 
       air(sock, "<" + str(sock.getpeername()) + ">" + key) 

      except: 
       connlist.remove(sock) 
       print "Connection Lost With : " + str(addr[1]) 
conn.close() 
s.close() 

Вот клиентский скрипт:

#!/usr/bin/env python 

print "-"*60 
print "WELCOME TO DYNASOCKET" 
print "-"*60 

import socket, os, sys 

host = "192.168.1.101" 
port = 8888 

try: 
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
    print "Socket Successfully Created." 
    s.connect((host,port)) 
    print "Connected With " + host + " : " + str(port) 
except socket.error, e: 
    print "Error : " + str(e) 

while 1: 
    reply = raw_input("Client : ") 
    s.send(reply) 
    message = s.recv(1024) 
    print "Server : " + message 

s.close() 

Когда я пытаюсь соединить клиента с другого компьютера, я получаю эту ошибку:

Error : [Errno 10060] A Connection attempt failed because the connected party 
did not respond after a period of time, or established connection failed 
because connected host has failed to respnd. 
+1

Не очень специфичны для питона. Вы уверены, что брандмауэр блокирует трафик? – Cld

+0

Часто возникающие проблемы возникают из-за того, что маршрутизатор не маршрутизирует определенные (большинство) портов, как вы ожидали. Если вы установите номер порта на 80 (порт HTTP) и повторите попытку, он все еще не работает? Я также предполагаю, что вы запустили сервер на указанном здесь компьютере «хозяин» и не пытаетесь подключить клиента к неправильному адресу. – Anthony

+0

Я не думаю, что брандмауэр блокирует любой трафик. Также я попытался изменить порт на 80. Но он по-прежнему отображает ту же ошибку. :( –

ответ

0

Вы связываете свой сервер только с локальным хостом, так что соединения с другими хостами блокируются.

Try:

s.bind(("0.0.0.0",port)) 
+0

Изменен хост на« 0.0.0.0 ». Но по-прежнему отображается та же ошибка. :( –

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