<<  >> (p.3)
    Author Topic: 📢 ⒶAtom - пишу свою крипту ⛏️⛏️⛏️  (Read 24015 times)
    lapitsky (OP)
    Member
    **
    Offline

    Activity: 202
    Merit: 27

    Atom foundation


    View Profile
    May 04, 2018, 08:54:38 PM
     #41

    5. Сокеты, сокеты, они такие сокеты

    Пришлось отказаться от готовых модулей для питона, о которых я писал раньше, оказалось, что либо они глючят, либо не обновлялись много лет или, возможно, я не смог до конца разобраться в них, поэтому пришлось разбираться в сокетах и отправке сообщения peer 2 peer, самостоятельно.

    Что оказалось полезно, для цельного понимания
    http://micromind.me/posts/writing-python-web-server-part-1
    https://www.youtube.com/watch?v=_vAjHdh92YU

    По итогу, в сухом остатке, код на питоне выглядит так:
    Code:
    #!/user/env python3
    # -*- coding: utf-8 -*-

    import socket
    import time
    import threading

    #
    # Ждем сообщения от ноды 1264
    #
    def server():
        # слушаем и отправляем данные
        s = socket.socket(socket.AF_INET,      # задамем семейство протоколов 'Интернет' (INET)
                              socket.SOCK_STREAM,  # задаем тип передачи данных 'потоковый' (TCP)
                              proto=0)
        host = socket.gethostname()
        print(host)
        port = 1264
        s.bind((host, port))

        s.listen(5)


        while True:
            c, addr = s.accept()
            c.send(b'Answer from node 1, adr: ' + str(addr).encode())
            while True:
                # Пока клиент не отключился, читаем передаваемые
                # им данные и отправляем их обратно
                data = c.recv(1024)
                if not data:
                    # Клиент отключился
                    break
                else:
                    print(data.decode())

    #
    # Отправляем сообщения ноде на 1265 порту
    #
    def client():
        while True:
            s_get = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            host = socket.gethostname()
            port = 1265
            while True:
                try:
                    s_get.connect((host, port))
                    break
                except ConnectionRefusedError:
                    time.sleep(10)
                    print ('Try connect')

            s_get.sendall(b'Msg from node 1')
            data = s_get.recv(1024)
            s_get.close()
            print('Received', repr(data.decode()))
            time.sleep(10)


    if __name__ == '__main__':
        my_thread_server = threading.Thread(target=server, args=())
        my_thread_client = threading.Thread(target=client, args=())
        my_thread_server.start()
        my_thread_client.start()

    Прием сообщений от ноды, отправка сообщения в ноду и создание двух параллельных потоков.
    Теперь нужно сформировать сообщение которое надо будет отправить, получить другой нодой и обработать, после чего достигнуть по этой информации консенсуса.

    ⚡⚡⚡
    Atom - пишу свою крипту, присоединяйся в ополчение - https://bt.irlbtc.com/view/3428149.0
    ⚡⚡⚡
Page 2
Viewing Page: 3