无法连接到本地主机python

时间:2018-05-07 21:26:37

标签: python sockets

您好我制作了这个文件服务器应用程序,我在一台笔记本电脑上打开了服务器,并在另一台笔记本电脑上打开了客户端程序,但我无法连接到服务器。两台笔记本电脑都连接到同一个wifi,所以不应该工作吗?如果我在一台笔记本电脑上打开服务器和客户端程序,客户端就可以连接到服务器。

这是我的代码

服务器

import threading
import os
import socket

def RetrFile(name, sock):
    filename = str(sock.recv(1024), 'utf-8')
    print(filename)
    if os.path.isfile(filename):
        sock.send(bytes("EXISTS" + str(os.path.getsize(filename)), 'utf-8'))
        userResponse = str(sock.recv(1024), 'utf-8')
        if userResponse[:2] == 'Ok':
            with open(filename, 'rb') as f:
                bytesToSend = f.read(1024)
                sock.send(bytesToSend)
                while bytesToSend != "":
                    bytesToSend=f.read(1024)
                    sock.send(bytesToSend)
    else:
        sock.send(bytes("ERR", 'utf-8'))
    sock.close()

def Main():
    host = socket.gethostbyname("localhost")
    port = 5123
    s = socket.socket()
    s.bind(('0.0.0.0', port))
    s.listen(5)
    print("Server started")
    while True:
        c, addr = s.accept()
        print("Client connected" + str(addr))
        t = threading.Thread(target=RetrFile, args=("rthread", c))
        t.start()
    s.close()

Main()

客户端

import socket

def Main():
    host = socket.gethostbyname("localhost")
    port = 5123

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

    filename = input("Filename? ->")
    if filename != 'q':
        s.send(bytes(filename,'utf-8'))
        data=str(s.recv(1024),'utf-8')
        if data[:6] == 'EXISTS':
            filesze = data[6:]
            message = input("File Exists" + filesze + "(Y/N)")

            if message == 'Y':
                s.send(bytes("Ok",'utf-8'))
                f = open('new_'+filename, 'wb')
                data = s.recv(1024)
                total = len(data)
                f.write(data)
                while total < int(filesze):
                    data = s.recv(1024)
                    total+= len(data)
                    f.write(data)
                    print('%.2f' %((total/int(filesze)*100)), " percentage complted ")
                print("Download Complete")
        else:
            print("doesnt exist")

    s.close()
Main()

1 个答案:

答案 0 :(得分:0)

您似乎误解了“localhost”的含义。它始终只是指您所在的计算机。因此对于客户端,“localhost”解析为自身,并且在服务器上“localhost”指向自身。因此,客户端在端口5123上查找在其自己的计算机上运行的服务器,这当然是失败的,因为服务器没有在同一台计算机上运行,​​它正在其他地方运行。这也是当服务器和客户端都在同一台机器上时代码工作的原因。

您需要获取服务器笔记本电脑的IP地址或主机名才能从客户端连接到它。您可以通过在Linux终端或Windows命令行中的服务器计算机上运行hostname,并将该名称而不是"localhost"放入客户端计算机上运行的代码中来实现此目的。

,例如,在终端的服务器笔记本电脑上:

$ hostname
myserver

在您的客户端代码中:

host = socket.gethostbyname("myserver")