SocketOpen

SocketOpen[port]

打开一个套接口,接受到 localhost:port 的 TCP 连接,并返回一个表示套接口的 SocketObject.

SocketOpen[address]

打开一个套接口,接受到指定本地地址的 TCP 连接.

SocketOpen[address,"protocol"]

打开一个套接口,接受具有指定协议的连接.

SocketOpen[address,{"protocol","type"}]

打开一个套接口,接受指定 protocoltype 的连接.

更多信息

  • 支持的协议包括:
  • "TCP"原始的 TCP 流协议
    "ZMQ"ZeroMQ 一对一消息协议
    {"ZMQ","type"}指定类型的 ZeroMQ 协议
  • 对于 ZMQ 套接口,可能的类型包括:
  • "Pair"可以与一个对等客户端进行发送/接收的套接口
    "Publish"可将消息发送到所有相连客户端的套接口
    "Subscribe"可接受来自发布套接口的消息的套接口
    "Request"将请求消息发送到相应的答复套接口并接收响应消息的套接口
    "Reply"接受来自相应的 "Request" 套接口的请求消息并发回响应消息的套接口
    "Dealer""Request" 套接口相同,不同的是以循环方式将已发送消息传递给所有相连客户端
    "Router""Reply" 套接口相同,不同的是以公平排队的方式从所有连接的客户端接收消息,并保留路由信息
    "Pull"接收消息的管道拓扑的套接口
    "Push"发送消息的管道拓扑的套接口
    "XPublish""Publish" 相同,但在此套接口上收到的消息是订阅的消息
    "XSubscribe""Subscribe" 相同,但此套接口发送的消息被用作相应 "XPublish" 套接口的订阅消息
    "Stream"用于将 ZMQ 套接口与非 ZMQ TCP 套接口连接在一起的套接口
  • 如果没有指定 ZMQ 协议类型,则基础套接口为 {"ZMQ","Pair"} 型套接口.
  • SocketOpen 只在你的本地主机上打开套接口.
  • SocketOpen 只能使用本地地址. 可能的形式包括:
  • {host,port}本地主机名或 IP 地址和端口号
    {host,"service"}本地主机名或 IP 地址和服务名称
    "host:port"本地主机名或带有端口的 IP 地址l
    {host,Automatic}指定主机上的可用端口
    Automatic本地主机上的可用端口
  • 主机名的形式为 "www.wolfram.com".
  • 可以用 "140.177.0.0"IPAddress[string] 形式给出 IP 地址,其中 string 为 IPv4 或 IPv6 IP 地址.
  • 可用 SocketConnect 来连接由 SocketOpen 打开的套接口. 在一台机器上打开套接口并不能保证另一台机器可以连接到它.
  • 对于要建立的连接,协议必须一致,并且不得有防火墙等拦截.
  • 可到 ZeroMQ documentation 查阅关于怎样使用不同类型的 ZMQ 套接口的信息.
  • Close 可被用于关闭由 SocketOpen 打开的连接.

范例

打开所有单元关闭所有单元

基本范例  (2)

打开一个套接口,允许客户端与之相连:

连接客户端:

关闭套接口:

打开一个 ZMQ 套接口:

将客户端与服务器相连:

从客户端往服务器写入一条消息:

从服务器读取消息:

关闭套接口:

范围  (3)

客户端连接到打开的 TCP 套接口后,可以将每个客户端作为具有 "ConnectedClients" 属性的 SocketObject 来访问.

打开服务器套接口,允许与之相连,并将客户端连接到套接口:

从服务器的角度列出客户端套接口:

这些套接口也显示为带有 Sockets 的远程套接口:

关闭套接口:

在指定的 IP 地址上打开服务器套接口:

在指定端口上打开服务器套接口:

关闭套接口:

打开类型为 "Push" 的 ZMQ 套接口,可用作单向消息管道:

"Pull" 类型的套接口相连:

"Push" 套接口写入消息:

"Pull" 套接口读取消息:

关闭套接口:

应用  (1)

使用 SocketOpen 在 Wolfram 语言中制作一个网络服务器.

开始监听一个 TCP 端口:

开始时没有连接的客户端:

从网络浏览器连接到服务器:

现在至少有一个从网络浏览器连过来的客户端:

为所有客户端写一个通用响应:

最后关闭与客户端的连接:

可能存在的问题  (1)

往由 SocketOpen 返回的套接口上写入只能用于 ZMQ 套接口;对于 TCP 套接口,必须使用 "ConnectedClients" 属性.

打开一个 TCP 和 ZMQ 套接口并与客户端连接:

在 TCP 套接口上写入失败,因为必须写入特定的客户端:

然而,直接写入 ZMQ 套接口则是可行的:

关闭所有套接口:

Wolfram Research (2017),SocketOpen,Wolfram 语言函数,https://reference.wolfram.com/language/ref/SocketOpen.html (更新于 2020 年).

文本

Wolfram Research (2017),SocketOpen,Wolfram 语言函数,https://reference.wolfram.com/language/ref/SocketOpen.html (更新于 2020 年).

CMS

Wolfram 语言. 2017. "SocketOpen." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2020. https://reference.wolfram.com/language/ref/SocketOpen.html.

APA

Wolfram 语言. (2017). SocketOpen. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/SocketOpen.html 年

BibTeX

@misc{reference.wolfram_2024_socketopen, author="Wolfram Research", title="{SocketOpen}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/SocketOpen.html}", note=[Accessed: 22-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_socketopen, organization={Wolfram Research}, title={SocketOpen}, year={2020}, url={https://reference.wolfram.com/language/ref/SocketOpen.html}, note=[Accessed: 22-November-2024 ]}