Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python套接字:如何在同一wifi上连接两台计算机_Python_Sockets_Networking - Fatal编程技术网

Python套接字:如何在同一wifi上连接两台计算机

Python套接字:如何在同一wifi上连接两台计算机,python,sockets,networking,Python,Sockets,Networking,我有一个两台笔记本电脑并排的设置,我想在它们之间发送消息,我发现当客户端和服务器都在同一台计算机上时,代码可以工作,但当它们分开时就不工作了 #SERVER import socket def Main(): host = "localhost" port = 5000 mySocket = socket.socket() mySocket.bind((host,port)) mySocket.listen(1) conn, addr = m

我有一个两台笔记本电脑并排的设置,我想在它们之间发送消息,我发现当客户端和服务器都在同一台计算机上时,代码可以工作,但当它们分开时就不工作了

#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 您需要告诉客户端网络上服务器的地址和端口。您还需要告诉服务器要侦听的地址和端口

为了方便起见,让我们绑定服务器的所有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不常见,因此可能被防火墙丢弃


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

它在一台计算机上工作,但当服务器和客户端在不同的计算机上返回mySocket.connect((主机,端口))socket.gaierr:[Errno-2]找不到名称或服务时,它就不起作用了。根据上面的说明,您可以使用在ifconfig(linux上)中找到的ip作为主机,我认为它是Windows上的ipconfig。如果没有手动输入,我们无法知道主机的IP地址,该怎么办?可能吗?