Форум программистов, компьютерный форум, киберфорум
Python: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
1 / 1 / 1
Регистрация: 29.10.2019
Сообщений: 77
1

Клиент-серверное приложение

18.05.2020, 15:00. Показов 3507. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Вновь нужна помощь.
По заданию нужно создать к-с приложение, работающее следующем образом:
Клиент отправляет на сервер выражение. Пример: 2+3*5
Сервер присылает ответ. Пример: Ответ: 17

Калькулятор я сделал, не без помощи, но не могу добиться должной работы от взаимодействия сервера и клиента. Сервер не может запуститься из-за непонятных мне ошибок. Файл сервера же, по большей части является чисто калькулятором.
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
#Server.py
import socket
import Calculator as calk
 
sock=socket.socket()
sock.bind(('', 9090))
sock.listen(1)
conn, addr = sock.accept()
 
print ('connected:', addr)
 
while True:
    data = conn.recv(1024)
    print("_-Calculation-_")
    while True:
        print("Введите выражение:")
        exp = input()
        print("")
        print("Ответ:")
        print(eval(exp))
        print("")
    if not data:
        break
conn.send('hello, client!'.encode())
 
conn.close()
Python
1
2
3
4
5
6
7
8
9
10
11
#Client.py
import socket
 
sock = socket.socket()
sock.connect(('', 9090))
sock.send('hello, world!')
 
data = sock.recv(1024)
sock.close()
 
print(data)
Добавлено через 2 часа 20 минут
Добился того, что сервер может поприветствовать клиента. Но выполнять функции калькулятора он не может.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#Server
import socket
sock = socket.socket()
print('''ЛПЗ 8 по python.
Вариант 1. Слелал Великанов Данил Дмитриевич''')
sock.bind(('', 9090))
sock.listen(1)
conn, addr = sock.accept()
while True:
    data = conn.recv(1024)
    
    if not data:
        break
    conn.send('Привет, клиент. Введи выражениеи получишь ответ: '.encode())
    data = conn.recv(1024)
    data = data.decode()
    conn.send((eval(data).encode()) 
   
conn.close()
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import socket
sock = socket.socket()
sock.connect(('localhost',9090))
sock.send('Привет, сервер!'.encode())
data = sock.recv(1024)
print(data.decode())
 
while True:
    msg =input()
    sock.send(msg.encode())
    data = sock.recv(1024).decode()
    print(data) 
print('\nClose client')
sock.close()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2020, 15:00
Ответы с готовыми решениями:

Клиент-серверное приложение с кнопкой
Нужно написать клиент-серверное приложение с кнопкой. Должна быть поддержка 30 клиентов. У клиента...

Циклическое клиент-серверное приложение
В рамках учебного задания необходимо разработать циклическое клиент-серверное приложение расчета...

Python 3, клиент-серверное приложение с GUI
Добрый день. По заданию мне необходимо организовать клиент-серверное приложение. На стороне клиента...

Клиент-серверное приложение на Python - общие моменты (дипломная работа)
Здравствуйте, форумчане! Заранее спасибо всем тем, кто не прошёл мимо! Итак, приступим. Тема...

6
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7219 / 4718 / 1226
Регистрация: 30.03.2015
Сообщений: 13,442
Записей в блоге: 29
18.05.2020, 15:02 2
Цитата Сообщение от JaCK_Flame Посмотреть сообщение
Сервер не может запуститься из-за непонятных мне ошибок.
каких? на китайском небось они и не читаемы?

Цитата Сообщение от JaCK_Flame Посмотреть сообщение
Файл сервера же, по большей части является чисто калькулятором.
не вижу чтобы клиент что-то арифметическое слал, зачем сервер просит инпут от юзера? он от клиента должен ждать задачу.

Добавлено через 1 минуту
Цитата Сообщение от JaCK_Flame Посмотреть сообщение
Но выполнять функции калькулятора он не может.
отладчик надо включить и смотреть что приходит, что отправляется
0
1 / 1 / 1
Регистрация: 29.10.2019
Сообщений: 77
18.05.2020, 15:19  [ТС] 3
Цитата Сообщение от Welemir1 Посмотреть сообщение
каких? на китайском небось они и не читаемы?
Я не столь гуру программист чтобы налету понимать суть ошибки.
Цитата Сообщение от Welemir1 Посмотреть сообщение
не вижу чтобы клиент что-то арифметическое слал, зачем сервер просит инпут от юзера? он от клиента должен ждать задачу.
msg =input()
sock.send(msg.encode() - отправка выражения на сервер
Цитата Сообщение от Welemir1 Посмотреть сообщение
отладчик надо включить и смотреть что приходит, что отправляется
до него обработка не доходит, почему-то зацикливается на приветствии conn.send('Привет, клиент. Введи выражение и получишь ответ: '.encode())
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7219 / 4718 / 1226
Регистрация: 30.03.2015
Сообщений: 13,442
Записей в блоге: 29
18.05.2020, 15:22 4
Цитата Сообщение от JaCK_Flame Посмотреть сообщение
Я не столь гуру программист чтобы налету понимать суть ошибки.
так хоть укажи их, желательно целиком

Цитата Сообщение от JaCK_Flame Посмотреть сообщение
почему-то зацикливается на приветствии conn.send
в каком смысле зацикливается? все время шлет клиенту одно и то же?
0
1 / 1 / 1
Регистрация: 29.10.2019
Сообщений: 77
18.05.2020, 15:55  [ТС] 5
Ошибок уже нет. А вот зацикливание действительно происходит.
Клиент: Привет сервер
Сервер: Привет, клиент! Введи выражение...
Клиент: 3+3
Сервер: Привет клиент.....
...

Добавлено через 27 минут
Как оказалось я редактировал не тот файл. Если использовать мой код, то ругается на синтаксис (любая строка после завершения цикла while является неправильной, даже если этой сроки нет)

Добавлено через 44 секунды
Кто куда, а я оправляться от нервного срыва
0
Эксперт Python
5436 / 3858 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
18.05.2020, 16:45 6
Цитата Сообщение от JaCK_Flame Посмотреть сообщение
Если использовать мой код, то ругается на синтаксис
С таким подходом и уровнем знаний бесполезно браться со клиент-серверные приложения.
Вы хотя бы интерфейс сокетов изучали? Нет. Так изучите. Он одинаков для всех языков и его нужно знать до того, как браться программировать сокеты на любом ЯП.
Заодно узнаете что сокеты бывают блокирующими и неблокирующими. Что ожидание данных может быть бесконечным, что accept нужно делать в цикле, зачем он вообще нужен и т.д.

Добавлено через 3 минуты
Вот простой пример из документации. Как ты думаешь почему он отработает ровно один раз: только на первое сообщение от клиента?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Echo server program
import socket
 
HOST = 'localhost'        # Symbolic name meaning all available interfaces
PORT = 50007              # Arbitrary non-privileged port
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen(1)
    print('Accepted by', HOST, PORT)
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data: break
            conn.sendall(data)

Python
1
2
3
4
5
6
7
8
9
10
# client
import socket
 
HOST = 'localhost'    # The remote host
PORT = 50007              # The same port as used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)
print('Received', repr(data))
0
1 / 1 / 1
Регистрация: 29.10.2019
Сообщений: 77
18.05.2020, 18:12  [ТС] 7
Не знаю

Добавлено через 13 секунд
Почему?
0
18.05.2020, 18:12
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.05.2020, 18:12
Помогаю со студенческими работами здесь

Клиент-серверное приложение
Подскажите, пожалуйста, как разработать клиент-серверное приложение при помощи сокетов. Клиент...

Клиент — серверное приложение
Реализуйте клиент — серверное приложение, позволяющее обмениваться сообщениями в формате один к...

Клиент-Серверное приложение Python
Доброго времени суток. У меня стоит задача: Клиент после запуска ожидает ввода пользователя ....

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

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

Клиент-серверное приложение: как определить, что сервер/клиент не отвечает в течении определенного времени
Пишу клиент-серверное приложение. Использую TCPListener и TCPClient. Вопрос: как определить что...

Клиент-серверное приложение
Доброго времени суток. У меня вот такая проблема у меня уже есть программа написанная на делфи но...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Когда лучше использовать LinkedList вместо ArrayList в Java
bytestream 28.01.2025
При разработке Java-приложений выбор правильной структуры данных играет ключевую роль в обеспечении эффективности и производительности программы. ArrayList и LinkedList являются двумя. . .
Какой ответ HTTP лучше использовать: 403 Forbidden или 401 Unauthorized, когда недостаточно прав
bytestream 28.01.2025
В современной веб-разработке правильная обработка ошибок и точное информирование клиентов о статусе их запросов играют критическую роль в создании надежных и безопасных приложений. Особое внимание. . .
Как получить список всех файлов коммита в Git
bytestream 28.01.2025
Система контроля версий Git представляет собой мощный инструмент для управления изменениями в программном коде и других файлах проекта. В основе работы Git лежит концепция коммитов - снимков. . .
Как записать только часть изменений файла в Git
bytestream 28.01.2025
В процессе разработки программного обеспечения часто возникает необходимость сохранить только определенные изменения из множества внесенных правок в файлах. Система контроля версий Git предоставляет. . .
[golang] 80. Remove Duplicates from Sorted Array II
alhaos 28.01.2025
В предоставленном упорядоченном по возрастанию целочисленном слайсе, оставить уникальные элементы полюс один возможный дубликат. Вернуть количество таких элементов. / / . . .
Что такое внедрение зависимостей и для чего оно применяется
bytestream 27.01.2025
В современной разработке программного обеспечения одной из ключевых проблем является управление зависимостями между различными компонентами системы. Внедрение зависимостей (Dependency Injection, DI). . .
Как установить cellpadding и cellspacing в CSS
bytestream 27.01.2025
При создании веб-страниц с табличными данными разработчики часто сталкиваются с необходимостью правильного оформления внутренних и внешних отступов в таблицах. В традиционной разметке HTML для этих. . .
Чем отличаются public, protected, package-private и private в Java
bytestream 27.01.2025
В языке программирования Java механизм модификаторов доступа играет ключевую роль в реализации одного из фундаментальных принципов объектно-ориентированного программирования - инкапсуляции. . . .
Зачем нужно explicit в C++. Преобразование типов
bytestream 27.01.2025
В мире программирования на C++ управление преобразованием типов данных играет crucial роль в создании надежного и безопасного кода. Язык C++ предоставляет множество механизмов для контроля над. . .
Как создать удалённую (remote) ветку в Git
bytestream 27.01.2025
Система контроля версий Git стала неотъемлемой частью современной разработки программного обеспечения, предоставляя разработчикам мощные инструменты для управления кодовой базой. Одним из ключевых. . .
Как создать утечку памяти в Java
bytestream 27.01.2025
Утечка памяти в Java представляет собой ситуацию, когда программа неэффективно использует доступную память, удерживая ссылки на объекты, которые больше не нужны для работы приложения. Несмотря на. . .
КуМир: как решать задачи на числа
bytestream 27.01.2025
КуМир (Комплект Учебных МИРов) представляет собой уникальную образовательную среду программирования, разработанную специально для обучения основам алгоритмизации и программирования. Эта система. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru