Python сокет-клиент всегда отправляет сообщение - PullRequest
0 голосов
/ 15 апреля 2020

Итак, у меня есть этот файл сервера, который в порядке, всегда доступен для соединений, после отправки сообщения от клиента, клиентское соединение закрывается. Я хочу, чтобы клиент снова подключился к отправке сообщения (снова получаю информацию). Я не хочу запускать клиент снова (в моем случае это odev1.py)

# server.py
import socket

HOST = socket.gethostname()
PORT = 65432

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
    server_socket.bind((HOST, PORT))
    server_socket.listen()

    while True:
        print('waiting for a connection')
        connection, client_address = server_socket.accept()
        try:
            print(f'{client_address[0]} has entered the chat\n')

            while True:
                data = connection.recv(1024)
                print(f'{client_address[0]} - {str(data, encoding="utf-8")}')
                if data:
                    print('sending data back to the client')
                    connection.sendall(data)
                else:
                    print('no data from', client_address[0])
                    break

        finally:
            print("Closing current connection")
            connection.close()

это мой клиент ->

# client.py
import sys
import socket

host = socket.gethostname()
port = 65432

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error as e:
    print("Error creating socket: %s" % e)
    sys.exit(1)
# Second try-except block -- connect to given host/port

try:
    s.connect((host, port))
except socket.gaierror as e:
    print("Address-related error connecting to server: %s" % e)
    sys.exit(1)
except socket.error as e:
    print("Connection error: %s" % e)
    sys.exit(1)
# Third try-except block -- sending data
try:
    # NOTE: I want it to take input again
    # Send data
    message = input('write something: ')
    s.sendall(message.encode('utf-8'))
    print('sending {!r}'.format(message))

    # Look for the response
    amount_received = 0
    amount_expected = len(message)

    while amount_received < amount_expected:
        data = s.recv(1024)
        amount_received += len(data)
        print('received {!r}'.format(data))

finally:
    print('closing socket')
    s.close()

вот так это выглядит сейчас :

image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...