У меня есть этот код:
import io
import socket
import sys
print("Are you server or client?")
print("\t\"s\" --- server")
print("\t\"k\" --- client")
print("To quit press \"q\"")
def typeChoice(choice):
if choice == 's':
print("-----------------------------------")
print(" Im server ")
print("-----------------------------------")
print("\n\n")
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
bufferSize = 1024
msgFromServer = "\tHello client, you have been connected to server."
bytesToSend = str.encode(msgFromServer)
server_name = socket.gethostname()
server_ip = socket.gethostbyname(server_name)
print("-----------------------------------")
print("Ethernet IPv4 address :\t",server_ip)
print("Set port for server :")
server_port_string = input()
print("-----------------------------------")
print("\n\n")
server_port = int(server_port_string)
try:
sock.bind((server_ip, server_port))
#sock.listen()
print("-----------------------------------")
print(' Server has binded ')
print(' Im listening... ')
print("-----------------------------------")
except bind_error:
print("Bind error")
SystemExit("Quitting program")
while(True):
bytesAddressPair = sock.recvfrom(bufferSize)
message = bytesAddressPair[0]
address = bytesAddressPair[1]
clientMsg = "Message from CLIENT:{}\t".format(message)
#clientIP = "Client IP Address:{}".format(address)
print(clientMsg)
#print(clientIP)
sock.sendto(bytesToSend, address)
elif choice == 'k':
print("-----------------------------------")
print(" Im client ")
print("-----------------------------------")
print("\n\n")
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
bufferSize = 1024
msgFromClient = "\tHello server, I connected to you"
bytesToSend = str.encode(msgFromClient)
print("-----------------------------------")
print("Set IP to connect to server :")
server_ip = input()
print("\n\n")
print("Set port to connect to server :")
server_port_string = input()
print("-----------------------------------")
print("\n\n")
server_port = int(server_port_string)
serverAddressConnection = (server_ip, server_port)
try:
sock.connect((server_ip, server_port))
print("Connected!")
except socket_error:
print("NOT connected!")
sock.sendto(bytesToSend, serverAddressConnection)
msgFromServer = sock.recvfrom(bufferSize)
msg = "Message from SERVER {}\t".format(msgFromServer[0])
print(msg)
print("Set fragment size :")
frag_size = input()
elif choice == 'q':
SystemExit("Quitting program")
else:
print("Wrong input!")
choice = input()
typeChoice(choice)
Я запускаю этот скрипт сначала как сервер, а затем как клиент. Я запускаю их обоих на одном компьютере (у меня открыты две командные строки), и все работает как надо. На обоих я ввожу тот же IP и тот же порт. Клиент получает сообщение от клиента, что он подключен к серверу, а сервер получает сообщение, что клиент подключен к нему.
Но теперь я подключаю два ноутбука по кабелю Ethernet. Оба ноутбука находятся в одной сети. На моем сервере я запускаю порт, и я жду, пока клиент подключится. На втором ноутбуке я запускаю клиент, я ввожу IP и порт (такой же, как у сервера), и затем он «зависает». Клиент не получает сообщение, а также сервер не получает сообщение. Просто ничего не происходит.
Я получил Python v 3.7
Что я делаю не так?