首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MQL5中接受Python生成的套接字的输出

在MQL5中接受Python生成的套接字的输出
EN

Stack Overflow用户
提问于 2018-08-02 09:03:46
回答 1查看 732关注 0票数 34

我已经创建了一个套接字文件,如下所示,并希望套接字的输出必须由MQL5读取。请参阅以下Python代码:

daemon.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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来完成,而不是使用MQL5。请帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2020-05-08 08:45:00

请找一个正在运行的例子。重要元素是在发送应答之前创建有效负载的字节对象,而不是字符串。套接字对象只生成和摄取字节

代码语言:javascript
复制
    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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51649672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档