首页 > 解决方案 > Client.py 没有连接到 server.py

问题描述

我对 python3 网络(套接字)编程有问题。问题是,当我运行 server.py 时,一切都很好。比我打开client.py,它必须连接到server.py,但它没有连接。它会停留 5-15 秒,然后给出连接错误。我允许访问 python 以使用网络。我不知道为什么它不起作用。

Server.py 代码:

import socket

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = '127.0.0.1'
port = 80

Buffer_Size = 1024

socket.bind((host, port))
socket.listen(1)
connectionNumber = 1
print("\n" + "[SERVER] Port" + str(port) + "opened. Connections are listening..." + "\n")

while True:
    print("\n" + "*"*50)
    print("[SERVER] Waitong connection {}...".format(connectionNumber))
    conn, addr = socket.accept()
    print("[SERVER] Connected to {}".format(addr))
    print("[SERVER] Receiving bytes...")
    while True:
        msgFromClient = socket.recv(Buffer_Size)
        if not msgFromClient:
            print("[SERVER] No message received.")
            break
        
        print("[CLIENT]: {}".format(msgFromClient))
        print("[SERVER] Message received, buffer emptied. " + connectionNumber + "Closing Connection...")
        conn.send(str(msgFromClient) + ". You are the client. Thanks for connecting!")
    conn.close()
    print("[SERVER] Connection closed...")
    connectionNumber += 1

client.py 代码:

import getpass

pcName = getpass.getuser()

import socket

clientName = socket.gethostname()
clientIP = socket.gethostbyname(socket.gethostname())

sendingMessageToServer = pcName +"___" + clientName + "___"+ clientIP

import socket

clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = '127.0.0.1'
port = 80
Buffer_Size = 1024
clientSocket.connect((host, port)) 

print("Sending message: {}".format(sendingMessageToServer))

clientSocket.send(sendingMessageToServer)

print("Message Sended Succesfully!")

messageFromServer = clientSocket.recv(Buffer_Size)

print("[SERVER] Received message: {}".format(messageFromServer))

print("[CLIENT SERVER] Message received.. Closing connection...")

clientSocket.close()

标签: pythonsocketsnetworking

解决方案


首先,您应该更改端口 80,因为它由 http 连接使用。也许你的系统正在接管它。设置例如端口 8001。从创建的对象中server.py获取传入数据,而不是:connsocket

msgFromClient = conn.recv(Buffer_Size)

通过套接字接收或发送的数据也应该是bytes类型,str因此您应该将所有recvsend参数更改为字节,例如:

conn.send(msgFromClient + b". You are the client. Thanks for connecting!")

或在client.py

clientSocket.send(sendingMessageToServer.encode())

 

推荐阅读