У меня есть пара server.py и client.py. Когда я запускаю сервер на своей машине и открываю несколько терминалов для запуска клиентов, я могу нормально подключиться. Но когда я пытаюсь запустить клиентов на другом компьютере, клиент никогда не подключается к серверу. Я почти уверен, что тестировал этот код несколько месяцев назад на нескольких компьютерах, и он работал нормально (хотя, возможно, я не правильно помню), но я думаю, что я обновил свою версию Python, так что, может быть, поэтому? Как я могу изменить свой код ниже, чтобы он работал?
server.py
import socket
from threading import Thread
import sys
clients = []
def recv(clientsocket):
while True:
msg = clientsocket.recv(1024) # wait for message from any of the clients.
print("\n" + msg.decode())
for c in clients: # send to all the clients.
c.send(msg)
def send(clientsocket):
while True:
msg = "[Server] %s" % input("\n") # wait for input
print(msg)
for c in clients: # send to all the clients.
c.send(msg.encode())
clientsocket.close()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Create a socket object
host = socket.gethostname() # Get local machine name
#port = 3001 # Reserve a port for your service.
port = int(input("Enter port: "))
print ('Server started at [%s]' % socket.gethostbyname(host))
print ('Waiting for clients...')
#s.bind((host, port)) # Bind to the port
s.bind((socket.gethostbyname(host), port))
s.listen(5) # Now wait for client connection.
while True:
#Waits until someone new to accept
c, addr = s.accept()
print(addr, "connected.")
clients.append(c)
thread_recv = Thread(target=recv, args=((c,)))
thread_recv.start()
thread_send = Thread(target=send, args=((c,)))
thread_send.start()
s.close()
client.py
import socket
from threading import Thread
hostname = input("Enter hostname/IP to connect to: ")
# port = 3001
port = int(input("Enter port: "))
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect((hostname, port))
def recv():
while True:
print("\n" + clientsocket.recv(2048).decode())
def send(username):
while True:
msg = "[%s] %s" % (username, input(""))
clientsocket.send(msg.encode()) # send message to the server.
username = input("Choose a username: ")
msg = "[%s has just connected]" % (username)
clientsocket.send(msg.encode())
thread_send = Thread(target=send, args=(username,))
thread_send.start()
thread_recv = Thread(target=recv, args=())
thread_recv.start()
while True:
# keep the threads going.
pass
Редактировать
Каждый раз, когда я запускаю сервер, он говорит, что мой IP-адрес один и тот же: 192.168.56.1. Даже если я выключил компьютер и попробовал снова. Но когда я захожу в Google и спрашиваю, какой у меня IP-адрес, это что-то совершенно другое. Почему сокет продолжает выбирать 192.168.56.1? Есть ли в этом что-то особенное? Это связано с моей проблемой?