Проблема с сокетом в асинхронном сокете клиента - PullRequest
0 голосов
/ 13 октября 2019

Моя проблема заключается в использовании 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)

Мне действительно нужен сервер, работающий в этой форме или что-то подобное, чтобы сокет (клиент, локальный сервер) слушал и читал

...