我有此代码:
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和相同的端口。
客户端从客户端获得消息,表明他已连接到服务器,而服务器获得消息,则表明客户端已与其连接。
但是现在我通过以太网电缆连接了两台笔记本电脑。两台笔记本电脑都在同一网络上。在我的服务器上,我设置端口和Im等待客户端连接。在第二台笔记本电脑上,我运行客户端,输入IP和端口(与服务器相同),然后“卡住”。客户端没有收到消息,服务器也没有收到消息。只是什么也没有发生。
我有Python v 3.7
我在做什么错了?