繁体   English   中英

Python Sockets:如何在同一 wifi 上的两台计算机之间进行连接

[英]Python Sockets: how to connect between two computers on the same wifi

我有两台相邻的笔记本电脑的设置,并想在它们之间发送消息,我发现当客户端和服务器在同一台计算机上时可以运行的代码,但是当它们分开时它不起作用。

#SERVER
import socket

def Main():
    host = "localhost"
    port = 5000

    mySocket = socket.socket()
    mySocket.bind((host,port))

    mySocket.listen(1)
    conn, addr = mySocket.accept()
    print ("Connection from: " + str(addr))
    while True:
            data = conn.recv(1024).decode()
            if not data:
                    break
            print ("from connected  user: " + str(data))

            data = str(data).upper()
            print ("sending: " + str(data))
            conn.send(data.encode())

    conn.close()

if __name__ == '__main__':
    Main()


#CLIENT
import socket

def Main():
        host = '0.0.0.0'#127.0.0.1
        port = 5000

        mySocket = socket.socket()
        mySocket.connect((host,port))

        message = input(" -> ")

        while message != 'q':
                mySocket.send(message.encode())
                data = mySocket.recv(1024).decode()

                print ('Received from server: ' + data)

                message = input(" -> ")

        mySocket.close()

if __name__ == '__main__':
    Main()

我尝试了许多不同的地址,包括 0.0.0.0、localhost、192.168... <- 来自 ifconfig 的 ip。 问题是什么? 我应该寻找什么最佳解决方案?

你需要告诉客户端你的服务器在你的网络上的地址和端口。 您还需要告诉服务器要侦听的地址和端口。

为方便起见,让我们绑定服务器的所有 IP 地址。 为此,请将服务器代码中的主机设置为“0.0.0.0”

对于客户端配置,您必须输入服务器的地址。 为此,我将在服务器代码中添加一行以显示该机器的主机名。

#SERVER
import socket

def Main():
    host = "0.0.0.0"
    port = 5000

    print socket.gethostname()

    mySocket = socket.socket()
    mySocket.bind((host,port))

    mySocket.listen(1)
    conn, addr = mySocket.accept()
    print ("Connection from: " + str(addr))
    while True:
            data = conn.recv(1024).decode()
            if not data:
                    break
            print ("from connected  user: " + str(data))

            data = str(data).upper()
            print ("sending: " + str(data))
            conn.send(data.encode())

    conn.close()

if __name__ == '__main__':
    Main()


#CLIENT
import socket

def Main():
        host = #put hostname here
        port = 5000

        mySocket = socket.socket()
        mySocket.connect((host,port))

        message = input(" -> ")

        while message != 'q':
                mySocket.send(message.encode())
                data = mySocket.recv(1024).decode()

                print ('Received from server: ' + data)

                message = input(" -> ")

        mySocket.close()

if __name__ == '__main__':
    Main()


 

尝试暂时禁用两台计算机上的防火墙。 如果修复了它,则创建规则以允许流量。 端口 5000 并不常见,因此它很可能被您的防火墙丢弃。

编辑:确保重新打开防火墙。 禁用防火墙只是为了调试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM