Связь Python Server-Client друг с другом

Я пытаюсь изменить связь между сервером и клиентом tcp/ip. Только сервер может общаться с клиентом. Я пытаюсь найти простой способ отправить сообщение обратно на сервер. Не чат!! Просто сервер, который будет отправлять данные клиенту и получать данные от клиента.

Я использую этот пример:

Сервер:

    host="my_ip"
    port=4446                  
    from socket import *              
    s=socket()
    s.bind((host,port))                 
    s.listen(1)                         
    print "Listening for connections.. "
    q,addr=s.accept()               
    var = 1
    while var == 1 :
         data=raw_input("Enter data to be send:  ")  
         q.send(data)  
    s.close()

Клиент:

    host="my_ip"
    port=4446 
    from socket import *
    s=socket(AF_INET, SOCK_STREAM)
    s.connect((host,port))
    var = 1
    while var == 1 :  
         msg=s.recv(1024)
         print "Message from server : " + msg
         #response = "Message delivered"   # Response to be send 
         #s.sendto(response(host,port)) 
    s.close()

person Marios Filipidis    schedule 02.12.2013    source источник
comment
Рассматривали ли вы возможность использования ZeroMQ? Он чрезвычайно прост в использовании и включает в себя всевозможные фантастические функции, такие как гарантия того, что клиент никогда не получит незаконченные сообщения, и это быстро, очень быстро. Это также не зависит от среды, что означает, что вы можете написать клиент или сервер на любом языке, который вам нравится. Я предлагаю вам попробовать. Вы также можете попробовать сервер Redis, он имеет фантастическую встроенную систему PUB SUB и очень прост в использовании.   -  person Trausti Thor    schedule 02.12.2013
comment
Большое спасибо... попробую   -  person Marios Filipidis    schedule 02.12.2013


Ответы (2)


На самом деле Python имеет встроенный класс, чтобы сделать вашу жизнь немного проще. http://docs.python.org/2/library/socketserver.html . Однако я не уверен, что понимаю вторую часть вашего вопроса; вы можете просто отправить данные обратно на сервер так же, как сервер отправлял данные клиенту.

person Monkeyanator    schedule 02.12.2013
comment
Единственное, что мне нужно, но я не могу найти, - это способ, которым клиент может что-то отправить обратно... Я не могу найти способ сделать это. Я использую .send и .recv, но получаю сообщение об ошибке: запрос на отправку или получение данных был запрещен, поскольку сокет не подключен и (при отправке в сокет дейтаграммы с использованием вызова sendto) не был указан адрес - person Marios Filipidis; 02.12.2013

Используйте sock.sendall(). Кроме того, вы не должны просто называть переменную «var», так как это не описывает, что она делает. Вместо этого я бы создал логическое значение и назвал его как-то вроде «isListening» или «isSending».

person Dylan    schedule 11.02.2016