Client.py не подключается к server.py

#python #sockets #networking

#python #сокеты #сеть

Вопрос:

У меня проблема с программированием сети (сокета) на 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()
 

Ответ №1:

Прежде всего, вы должны изменить свой порт 80, потому что он используется http-соединением. Возможно, ваша система принимает это на себя. Установите, например, порт 8001. В server.py вы получаете входящие данные от созданного conn объекта, а не socket :

 msgFromClient = conn.recv(Buffer_Size)
 

Также данные, полученные или отправленные через сокет, должны быть bytes типа, не str поэтому вам следует изменить все recv и send параметры на байты, например:

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

или в client.py :

 clientSocket.send(sendingMessageToServer.encode())