当前位置: 首页 > news >正文

[Julia] 网络和流

IOStream 输入输出流

代码stdinstdoutstderr
含义标准输入流标准输出流标准输出错误流
  • stdin: 程序通过stdin读取用户输入的数据(例如 readline())
  • stdout: 程序通过 stdout 输出正常结果 (例如println(“Hello”))
  • stderr: 专门用于输出错误信息和警告 例如 (@error) 确保错误信息不被正常输出淹没。

三者均为全局常量,无特殊情况尽量不调用不变更这三个变量,避免不必要的麻烦。

stdout 默认行缓冲, 遇到换行符或者缓冲区满时刷新
stderr 默认无缓冲,及时输出,避免错误信息延迟

write(stdout, "Hello")  # 输出到屏幕
data = read(stdin, Char)  # 从键盘读取输入的字符

TCP 概念

TCP(Transmission Control Protocol,传输控制协议)是互联网协议套件(TCP/IP)中的核心传输层协议,主要用于在网络中提供可靠的、面向连接的、基于字节流的数据传输服务。

Julia 实现简单的 TCP 例子

让我们直接进入一个 TCP 套接字相关的简单示例。此功能位于名为 Sockets 的标准库中。让我们先创建一个简单的服务器:

using Sockets
errormonitor(@async begin   # 异步并行server = listen(2000)while true   # 始终运行的死循环sock = accept(server)println("Hello World\n")end
end)

Task (runnable) @0x000000000e1d03f0
从通道 ip"::1" 监听接口 2000

listen(ip"::1",2000)

Sockets.TCPServer(Base.Libc.WindowsRawSocket(0x00000000000003c4) active)
返回接口 2000 代码的运行结果

connect(2000)

Hello World

TCPSocket(Base.Libc.WindowsRawSocket(0x0000000000000544) open, 0 bytes waiting)

附带停机功能的 TCP 例子

using Sockets
# 启动异步服务器
server = listen(2000)
task = @async begintrywhile isopen(server)  # 检查 server 是否仍开启sock = accept(server)println("Hello World")close(sock)  # 关闭客户端连接endcatch eisa(e, Base.IOError) || rethrow()  # 忽略因关闭 server 引发的 IOErrorend
end
  • 监听接口 2000
connect(2000)

Hello World

  • 停止服务器:关闭监听套接字, 再尝试监听

close(server)
connect(2000)

ERROR: IOError: connect: connection refused (ECONNREFUSED)

解析 IP 地址

using Sockets
connect("www.csdn.net", 80)
getaddrinfo("www.csdn.net")

ip"xxx.xxx.xxx.xxx"

不同的域名因为协议不同会有不同的ip地址格式

异步 I/O

用异步并行宏 @async 将字符串 “Hello, World!” 写入 “foo.txt” 文件

task = @async open("foo.txt", "w") do io   # @async 异步并行write(io, "Hello, World!")end;
wait(task)
readlines("foo.txt")

1-element Vector{String}:
“Hello, World!”

如果给多个任务,更容易观察到异步特点:

@async for hostname in ("bing.com", "cn.julialang.org", "www.csdn.net")@async beginconn = connect(hostname, 80)write(conn, "GET / HTTP/1.1\r\nHost:$(hostname)\r\n\r\n")readline(conn, keep=true)println("Finished connection to $(hostname)")endend

Finished connection to www.csdn.net
Finished connection to bing.com
Finished connection to cn.julialang.org

从输出结果不难发现尽管最后安排与 CSDN 通信, 但是 CSDN 是第一个返回信息的。

http://www.dtcms.com/a/333758.html

相关文章:

  • vue2 + SimpleMindMap 制作思维导图
  • 野指针:程序崩溃的隐形杀手
  • 订单状态定时处理(Spring Task 定时任务)
  • 机械学习---词向量转化评价,附代码实例
  • 力扣(接雨水)——单调栈
  • 第454题.四数相加II
  • JavaWeb开发_Day12
  • 基于Selenium的web自动化框架
  • 电视同轴电缆全面指南:从基础到应用,批量测量一键计量
  • 第四章:大模型(LLM)】06.langchain原理-(2)langchain Chain的使用方法
  • 力扣top100(day04-03)--二分查找
  • MqSQL中的《快照读》和《当前读》
  • [论文笔记] WiscKey: Separating Keys from Values in SSD-Conscious Storage
  • Linux core dump
  • Flutter开发 webview_flutter的基本使用
  • MC0423铺砖块
  • Linux系统编程—Linux基础指令
  • OpenCV Python——图像查找(特征匹配 + 单应性矩阵)
  • Linux软件编程(五)(exec 函数族、system、线程)
  • SQL:生成日期序列(填补缺失的日期)
  • 磁悬浮轴承“幽灵振动”克星:深度解析同频振动机理与精准打击策略
  • 优先级反转问题
  • [Python 基础课程]根据描述定义一个 Person 类
  • 关注与优化:用于骨龄评估的交互式关键点定位与颈椎定量分析|文献速递-深度学习人工智能医疗图像
  • Go语言中的指针接收者
  • 语音活动检测VAD技术简介
  • 崩溃大陆2 送修改器 PC/手机双端(Crashlands2)免安装中文版
  • Fanuc机器人EtherCAT通讯配置详解
  • 思科应用中心基础设施(ACI)设计指南
  • Redis面试精讲 Day 22:Redis布隆过滤器应用场景