【问题标题】:Accepting output of the socket generated by Python in MQL5在 MQL5 中接受 Python 生成的套接字的输出
【发布时间】:2019-01-09 23:48:55
【问题描述】:

我创建了一个类似于以下内容的套接字文件,并希望 MQL5 必须读取套接字的输出。请参阅以下 Python 代码:

daemon.py

import socket
#import arcpy

def actual_work():
    #val = arcpy.GetCellValue_management("D:\dem-merged\lidar_wsg84", "-95.090174910630012 29.973962146120652", "")
    #return str(val)
    return 'dummy_reply'


def main():
    sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
    try:
        sock.bind( ('127.0.0.1', 6666) )

        while True:
            data, addr = sock.recvfrom( 4096 )
            reply = actual_work()
            sock.sendto(reply, addr)
    except KeyboardInterrupt:
        pass
    finally:
        sock.close()


if __name__ == '__main__':
    main()

client.py

import socket
import sys


def main():
    sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
    sock.settimeout(1)
    try:
        sock.sendto('', ('127.0.0.1', 6666))
        reply, _ = sock.recvfrom(4096)
        print reply
    except socket.timeout:
        sys.exit(1)
    finally:
        sock.close()


if __name__ == '__main__':
    main()

请帮助我通过 MQL5 接受套接字的输出

已编辑

我只是希望 reply 应该在由 daemon.py 生成的变量中被 MQL5 接受。我怎么能这样做?假设我希望 MQL5 打印来自 Python 的响应,如上例所示,如果可能,我希望 MQL5 应在字符串变量中以dummy_reply 形式提供输出。

ZeroMQ 有什么可能吗?

我想让client.py 使用 MQL5 完成,而不是使用 Python。请帮帮我。

【问题讨论】:

  • 那里有基本的 UDP 客户端/服务器示例代码。这与 MQL5 有何关系?您究竟想与 MQL5 交流什么?
  • @AKX 我只想让reply 在一个由daemon.py 生成的变量中被MQL5 接受。我怎么能这样做?假设我希望 MQL5 打印来自 python 的响应,如上例所示,如果可能,我希望 MQL5 应在字符串变量中以dummy_reply 形式提供输出。
  • 你得到了我想要达到的目标,或者你有任何问题。请随时询问。
  • 谁能帮我解决这个问题,请告诉我?
  • 真可惜!..没有人对我的问题有任何答案。我=我想我每次申请都浪费了我的赏金。

标签: python python-3.x sockets zeromq mql5


【解决方案1】:

请找到一个运行示例。重要的元素是在作为回复发送之前创建有效负载的字节对象而不是字符串。 socket 对象只产生和摄取 bytes


    import socket
    import threading
    import sys


    def actual_work(data):
       print(data)
       return b'ACK'

    def daemon():
       sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
       sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
       sock.bind(('127.0.0.1', 6666))
       print("Listening on udp %s:%i" % ('127.0.0.1', 6666))
       try:

          while True:
              data, addr = sock.recvfrom(4096)
              ack = actual_work(data)
              sock.sendto(ack, addr)
       except Exception as e:
          print(e)  
       finally:
          sock.close()


    def client():
       sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
       sock.settimeout(1)
       try:
           sock.sendto(b'payload', ('127.0.0.1', 6666))
           reply, _ = sock.recvfrom(4096)
           print(reply)
       except socket.timeout as e:
           print(e)
           sys.exit(1)
       finally:
           sock.close()

    if __name__ == '__main__':
        thread = threading.Thread(target=daemon)
        thread.start()
        client()
        client()
        client()
        client()
        #Issue kill thread here
        thread.join()

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    相关资源
    最近更新 更多