SocketConnect

SocketConnect[address]

与指定地址的 TCP 主机建立套接口连接,并返回表示连接的 SocketObject.

SocketConnect[address,"protocol"]

使用指定的协议连接到 address 处的主机上.

SocketConnect[socket]

建立到当前会话中打开的本地套接口的连接.

更多信息

  • 可能的套接口地址包括:
  • {host,port}主机名或 IP 地址及端口号
    {host,"service"}主机名或 IP 地址及服务名
    "host:port"主机名或带端口的 IP 地址
    port本地套接口 localhost:port
    URL["url"] or "url"完整的 URL(比如 http://www.wolfram.com)
  • 支持的协议包括:
  • "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 协议类型,则基础套接口为 "Pair" 型套接口.
  • 主机名有类似 "www.wolfram.com" 的形式.
  • IP 地址可以以 "140.177.0.0"IPAddress[string] 的形式给出,其中 string 是一个 IPv4 或 IPv6 的 IP 地址.
  • 当地址被给定为没有指定端口号的 URL 时,从 URL 方案(例如:http 端口 80)中推导出端口号.
  • SocketConnect[SocketObject[]] 可用来建立到 SocketOpen 打开的本地套接口的连接.
  • Close 可被用于关闭由 SocketConnect 打开的连接.

范例

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

基本范例  (2)

打开由 URL 指定的到服务器的连接:

写入套接口:

将整个响应作为字符串读入:

显示结果,不额外换行:

关闭套接口连接:

打开一个 ZMQ 套接口:

连接到套接口:

发送字符串到服务器套接口:

从客户端套接口读取字符串:

ByteArray 转换成字符串:

关闭套接口:

范围  (1)

在可用端口打开一个 ZMQ 套接口:

手动指定端口,连接到套接口:

发送表达式到服务器套接口:

从客户端套接口读取表达式:

发送表达式列表到服务器套接口:

从客户端套接口读取表达式:

关闭套接口:

应用  (1)

下面的例子演示了 ZMQ 发布-订阅模型的使用方式,其中一个服务器广播消息,多个客户端接收这些消息. 为简单起见,在同一 Wolfram Engine 进程中同时运行发布者和多个订阅者,通常,发布者和订阅者在不同的进程中和/或不同的机器上运行.

为发布者打开一个套接口:

将多个订阅者与发布者相连:

确保所有的订阅者收听所有的消息:

尚未发送任何消息,因此订阅者尚未准备好阅读任何内容:

从发布者发送一条消息:

现在,订阅者已准备好阅读该消息:

与所有订阅者一起阅读该消息:

将所得字节数组转换为字符串:

关闭发布者和订阅者套接口:

可能存在的问题  (2)

ReadString 只能用于 TCP 套接口,因为 ReadString 要等到套接口被服务器关闭才返回数据. 而服务器从不关闭 ZMQ 套接口,因此数据被无限期地阻断.

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

向客户端写入一条消息,并关闭服务器:

ReadString 被无限期地阻断:

关闭客户端套接口:

当使用 SocketOpen 打开的 TCP 服务器套接口时,在 ReadString 返回数据前必须关闭连接.

打开一个 TCP 套接口,并连接一个客户端:

向远程客户端写入一条消息,并关闭服务器:

ReadString 被无限期地阻断,因为套接口还没有被关闭:

关闭远程套接口,强制 ReadString 返回数据:

关闭套接口:

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

文本

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

CMS

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

APA

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

BibTeX

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

BibLaTeX

@online{reference.wolfram_2024_socketconnect, organization={Wolfram Research}, title={SocketConnect}, year={2017}, url={https://reference.wolfram.com/language/ref/SocketConnect.html}, note=[Accessed: 21-November-2024 ]}