#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())