使用UDP插槽通过以太网电缆将两个笔记本电脑连接到同一网络上

时间:2019-10-14 23:21:36

标签: python sockets udp ethernet

我有此代码:

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

我在做什么错了?

0 个答案:

没有答案