сокет-сервер

Ayris

Новичок
Пользователь
Мар 13, 2022
6
1
3
Занималась созданием сокет-сервера на основе TCP-протокола. Эта программа вычисляет 2 числа, отправленные клиентом на TCP-сокет, а сервер отвечает результатом после операций над числами, а затем сервер продолжил бы ожидать от клиента новую пару чисел. В случае, если клиент послал сообщение (например close), то закрывается соединение с обеих сторон.
Этот сервер работает неплохо. Однако, после получения результата клиентом от сервера сразу закрывается соединение со стороны клиента, то есть завершается цикл и клиент не может отправлять новую пару чисел. Я бы хотела узнать, где я совершила ошибку
Python:
# сервер
import socket

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

server_address = ('localhost', 9095)
print('starting up on {} port {}'.format(*server_address))
sock.bind(server_address)

sock.listen(1)

while True:
    print('waiting for a connection')
    connection, client_address = sock.accept()

    print('connection from', client_address)

    while True:
        data = connection.recv(1024)
        print('received {!r}'.format(data))
        if data:
            print('sending data back to the client')
            input_data = (data.decode())
            expression = input_data[0] + input_data[2] + input_data[1]
            result = eval(expression)
            connection.sendall(str(result).encode())
        else:
            print('no data from', client_address)
            break

Python:
# клиент
import socket

sock = socket.socket()
sock.connect(('localhost', 9095))

x = input("X = ")
y = input("Y = ")
do = input("(+ - / *): ")

message = x + y + do
sock.send(message.encode())

data = sock.recv(1024)
res = data.decode()
print(res)

sock.close()
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Например так:
Python:
# Клиент
import socket

sock = socket.socket()
sock.connect(('localhost', 9095))
while True:
    x = input("X = ")
    y = input("Y = ")
    do = input("(+ - / *): ")
    if do == 'close':
        break

    message = x + y + do
    sock.send(message.encode())

    data = sock.recv(1024)
    res = data.decode()
    print(res)
sock.close()
 
Последнее редактирование:

Ayris

Новичок
Пользователь
Мар 13, 2022
6
1
3
Например так:
Python:
# Клиент
import socket

sock = socket.socket()
sock.connect(('localhost', 9095))
while True:
    x = input("X = ")
    y = input("Y = ")
    do = input("(+ - / *): ")
    if do == 'close':
        sock.close()

    message = x + y + do
    sock.send(message.encode())

    data = sock.recv(1024)
    res = data.decode()
    print(res)
Спасибо за помощь 🙏💕
 

Форум IT Специалистов