Занималась созданием сокет-сервера на основе 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()