【问题标题】:Reading composite type over TCP in Julia在 Julia 中通过 TCP 读取复合类型
【发布时间】:2019-10-17 09:20:43
【问题描述】:

我正在尝试通过 TCP 发送/接收复合类型。为了做到这一点,我首先创建了监听器部分:

using Sockets

# my-compiste-type
struct Signal
 min::Array{Float32,1}
 max::Array{Float32,1}
end

listener = listen(12345)
receiver = accept(listener)

read!(receiver, Ref()) # problem !!!

另一方面,发件人部分代码:

using Sockets

# my-compiste-type
struct Signal
    min::Array{Float32,1}
    max::Array{Float32,1}
end

s = Signal(rand(0:1, 10), rand(0:1, 10))   # data to send 


client = connect(12345) # connecting to server side
write(client, Ref(s))

现在当我尝试阅读 read!(receiver, Ref()) 时出现问题。如果我写read!(receiver, Ref(Signal)()),那么我会遇到分段错误并且程序退出。如果我写read!(receiver, Ref(typeof(Signal)()),我就会出错。

将复合数据类型从发送方发送到接收方的正确方法是什么?

我还在Julia discourse page 上发现了一个类似的问题,但 o.p.解决了 UDPSocket 的问题。我也试过了,但它使用reinterpret 函数。并且 reinterpret 函数不会将 Signal 数据类型转换为 UInt 或其他类型。

你能帮忙吗?

B.R.

附言顺便说一句,我使用的是 Julia 版本 1.0.3。

【问题讨论】:

  • 你可以用docs.julialang.org/en/v1/stdlib/Serialization解决这个问题
  • 我使用的是 Julia 版本 1.0.3。文档中的方法需要 1.1; 3 分中的 2 分。
  • 您需要的序列化函数在 1.0.3 中可用。 (1.1中增加了对文件名的操作)
  • 非常感谢。现在解决了:)
  • 你能写出你的解决方案吗?所以我可以给你一个赞成票:))

标签: types tcp type-conversion julia


【解决方案1】:

使用您的示例,您可以使用 Julia 的原生序列化功能:

发送:

import Sockets, Serialization

struct Signal # my-compiste-type
    min::Array{Float32,1}
    max::Array{Float32,1}
end

s = Signal(rand(0:1, 10), rand(0:1, 10)) # data to send 
client = Sockets.connect(12345) # connecting to server side
s = Serialization.serialize(client, s) # serialize content
# ... remember to cleanup IO connections with close

接收

import Sockets, Serialization

struct Signal # my-compiste-type
    min::Array{Float32,1}
    max::Array{Float32,1}
end

listener = Sockets.listen(12345)    
receiver = Sockets.accept(listener)
s = Serialization.deserialize(receiver)
# ... remember to cleanup IO connections with close

记住:

【讨论】:

    猜你喜欢
    • 2012-12-02
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多