Моя проблема заключается в использовании asyncore с сокетами. Я пытаюсь подключиться к одному серверу в качестве отправляющей и получающей информацию клиента.
Проблема в том, что мне нужно сохранить соединение, поэтому мне нужно отправить эхо-сообщениекаждую минуту.
Я могу получить информацию из асинхронного сокета правильно, но сложность заключается в том, что мне нужно отправить информацию на этот сервер, потому что мне нужно открыть локальный сервер, чтобы получить информацию с другой стороны, прочитать и отправитьна основной сервер я попытался ввести в асинхронный код код для открытия моего локального сервера, но когда я пытаюсь отправить информацию recv с локального сервера на главный сервер, он не отправляет или не читает ответ. Не могли бы вы мне помочь?
Код сервера провайдера:
import socket
import time
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 1111
s.bind(('127.0.0.1', port))
s.listen(1000)
while True:
conn, addr = s.accept()
while True:
conn.send('HOLA')
time.sleep(3)
data = conn.recv(1024) # till data is coming
print 'INCOMING ECHO MESSAGE at ' + datetime.datetime.now().strftime("%H:%M:%S")
print data
if data == 'ECHO':
print ('Sending ECHO to ' + str(addr))
time.sleep(5)
conn.send('ECHO GOT')
elif data == 'topup':
print ('Sending Topup to ' + str(addr))
time.sleep(5)
conn.send('TOPUP GOT')
print ('Sent ...')
Клиент подключается к основному серверу для чтения и записи Но мне нужен еще один локальный сервер для прослушивания запроса клиента:
import asyncore
import socket
import datetime
import sys
import time
class HTTPClient(asyncore.dispatcher):
def __init__(self, host):
asyncore.dispatcher.__init__(self)
print ('Stablish connection with provider Server')
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.connect((host, 1111))
self.start()
self.bufferlocal = ''
#self.buffer = bytes('GET %s HTTP/1.0\r\nHost: %s\r\n\r\n' %(path, host))
def handle_connect(self):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 12345
s.bind(('0.0.0.0', port))
s.listen(5)
while True:
print 'open server at ' + datetime.datetime.now().strftime("%H:%M:%S")
c, addr = s.accept()
print 'Local Socket Got connection from %s' % (str(addr)) + ' at ' + datetime.datetime.now().strftime(
"%H:%M:%S")
data = c.recv(1024)
while data:
print 'send to movi ' + data + ' at ' + datetime.datetime.now().strftime("%H:%M:%S")
self.bufferlocal = data
data = c.recv(1024)
def handle_close(self):
self.send(self.bufferlocal)
def handle_read(self):
data = self.recv(1024)
if data != '':
print data
def writable(self):
pass
def handle_write(self):
pass
def start(self):
pass
client = HTTPClient('127.0.0.1')
asyncore.loop()
Код клиента:
import socket
import sys
import socket
import fcntl, os
import errno
from time import sleep
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('0.0.0.0', 12345)) # Now setting to non-blocking mode
data = 'ECHO'
sock.send(data)
Мне действительно нужен сервер, работающий в этой форме или что-то подобное, чтобы сокет (клиент, локальный сервер) слушал и читал