Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
6 / 6 / 5
Регистрация: 22.11.2016
Сообщений: 49

Как передать двузначные и более числа со знаком действия в клиент-серверном консольном приложении?

02.10.2018, 19:40. Показов 1702. Ответов 4

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Имеется просто клиент-серверное приложение, нужно передать 2 произвольных числа и знак действия (+ / * -) на сервер и получить на клиенте ответ. Я смог реализовать это для числе [-9..+9] т.к. послыая, например a=10 b=2 do= * я получаю 120 (т.к. input_data[0]=1; i_d[1] = 0; i_d[1] = 2; id[3]= * тобишь записывается и передается 120...)

server.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import socket
 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
server_address = ('localhost', 9090)
print('  {} порт таков: {}'.format(*server_address))
sock.bind(server_address)
 
sock.listen(1)
 
while True:
 
    print('waiting for a connection')
    connection, client_address = sock.accept()
    try:
        print('подключение от', client_address)
 
        while True:
            data = connection.recv(1024)
            print('получили {!r}'.format(data))
            if data:
                print('отправляю Клиенту')
                input_data = (data.decode()) #i_d[2]=sign
                expression = input_data[0] + input_data[2] + input_data[1]
                print(input_data[0], "__", input_data[2], "__", input_data[1]) #понимаю что тут моя слабось но не могу понять
#как починить :C
                print(expression)
                result = eval(expression)
                connection.sendall(str(result).encode())
            else:
                print('пусто', client_address)
                break
 
    finally:
        connection.close()
client.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import socket
 
sock = socket.socket()
sock.connect(('localhost', 9090))
while 1:
    a = input("a= ")
    b = input("b= ")
    do = input("действие +; -; /; *  ")
 
    message = a + b + do
    sock.send(message.encode())
 
    data = sock.recv(1024)
    res = data.decode()
    print(res)
 
sock.close()
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.10.2018, 19:40
Ответы с готовыми решениями:

Как исправить сбой повторного подключения в клиент-серверном приложении
Есть сервер и клиент. Первое подключение всегда успешное. Если закрыть клиент и открыть снова, то он не сможет подключиться к серверу. ...

Как организовать потоковую передачу видео в обычном клиент-серверном приложении
Здравствуйте, как организовать потоковую передачу видео в обычном клиент-серверном приложении? На локальную вебку выхожу с помощью AForge...

Как определить (нештатное) отключение сервера в клиент-серверном приложении (tcp Socket)
Есть некое приложение на вин. форм, которое постоянно соединятся с сервером. При нормальном отключении сервера, а именно его банального...

4
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
02.10.2018, 20:44
Лучший ответ Сообщение было отмечено Sad sack как решение

Решение

Так, например, можно

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import socket
import pickle
 
class Ops:
    a = None
    b = None
    op = None
 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
server_address = ('localhost', 9090)
print('  {} порт таков: {}'.format(*server_address))
sock.bind(server_address)
 
sock.listen(1)
 
while True:
 
    print('waiting for a connection')
    connection, client_address = sock.accept()
    try:
        print('подключение от', client_address)
 
        while True:
            data = connection.recv(1024)
            # print('получили {!r}'.format(data))
            ops = pickle.loads(data)
            print(ops.a, ops.b, ops.op)
            if data:
                print('отправляю Клиенту')
                expression = ops.a + ops.op + ops.b
                print(expression)
                result = eval(expression)
                connection.sendall(str(result).encode())
            else:
                print('пусто', client_address)
                break
 
    finally:
        connection.close()
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import pickle
import socket
 
class Ops:
    a = None
    b = None
    op = None
 
 
sock = socket.socket()
sock.connect(('localhost', 9090))
while 1:
    ops = Ops()
    ops.a = input("a= ")
    ops.b = input("b= ")
    ops.op = input("действие +; -; /; *  ")
 
    message = pickle.dumps(ops)
    sock.send(message)
 
    data = sock.recv(1024)
    res = data.decode()
    print(res)
 
sock.close()
1
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
02.10.2018, 20:49
надо как то обьяснять программе где какие числа и знаки. используй разделитель ( для примера @ )ну и вычисления я бы вынес в функции которые закинул бы в словарь где ключ-действие а значение-функция выполняющая это действие
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import socket
 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 9090)
print('  {} порт таков: {}'.format(*server_address))
sock.bind(server_address)
sock.listen(1)
 
while True:
    print('waiting for a connection')
    connection, client_address = sock.accept()
    try:
        print('подключение от', client_address)
        while True:
            data = connection.recv(1024)
            input_data = data.decode().split('@')
            print('получили {}{}{}'.format(*input_data))
            if data:
                print('отправляю Клиенту')
                print('_'.join(input_data)) #понимаю что тут моя слабось но не могу понять
                result = eval(''.join(input_data))
                connection.sendall(str(result).encode())
            else:
                print('пусто', client_address)
                break
    finally:
        connection.close()
________________________________________ _________
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import socket
 
sock = socket.socket()
sock.connect(('localhost', 9090))
while 1:
    a = input("a= ")
    b = input("b= ")
    do = input("действие +; -; /; *  ")
 
    message = f'{a}@{do}@{b}'
    sock.send(message.encode())
 
    data = sock.recv(1024)
    res = data.decode()
    print(res)
sock.close()
1
6 / 6 / 5
Регистрация: 22.11.2016
Сообщений: 49
02.10.2018, 21:08  [ТС]
Semen-Semenich;ТабуретY. Спасибо господа - а то голову сломал Умом то понимал что разделить можно но в течении недели ползал в гугл регулярно под разными запросами и не нашел таких способов. Ну чтож - пойду читкать про pickle и играться с "ключ-действие "
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
02.10.2018, 21:20
Цитата Сообщение от Sad sack Посмотреть сообщение
играться с "ключ-действие "
пример
Python
1
2
3
4
5
6
7
8
9
10
11
def f1(x,y):
    return x*y
def f2(x,y):
    return x+y
 
dct = {'*': f1, '+': f2}
a,b = 10,20
do = '*'
print(dct[do](a,b))
do = '+'
print(dct[do](a,b))
200
30
>>>
в дальнейшем просто добавив функцию и ключ по которому она будет вызываться вы расширите возможность
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2018, 21:20
Помогаю со студенческими работами здесь

Аутентификация в клиент-серверном приложении
Доброго времени суток, граждане. Делаю клиент-серверное приложение с толстым клиентом. Соединение происходит с помощью контрактов WCF....

Сериализация в клиент-серверном приложении
Есть вопрос, пишу клиент-серверное приложение ,все хорошо, но когда конектиться 2 клиент сериализация выдает ошибку в документе (1,1). Я...

проблемы в клиент серверном приложении
Доброго время суток! вот столкнулся с такой проблемой. пишу чат 1 на 1 в данном случае. суть проблемы в том что что бы принять...

Сериализация в клиент-серверном приложении
Доброго времени суток. Пишу скелет простенького клиент-серверного приложения и почти сразу столкнулся со следующей проблемой - при...

Обработка ошибки в Клиент - Серверном приложении
Доброго времени суток. Писал чат на сокетах. Есть приложение Сервер и приложение Клиент. Клиент работает, естественно, только тогда,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru