Kad*_*nel 1 types tcp type-conversion julia
我正在尝试通过 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 !!!
Run Code Online (Sandbox Code Playgroud)
另一方面,发送方部分代码:
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))
Run Code Online (Sandbox Code Playgroud)
现在当我尝试阅读时出现问题read!(receiver, Ref())。如果我写read!(receiver, Ref(Signal)()),就会出现分段错误并且程序退出。如果我写的read!(receiver, Ref(typeof(Signal)())话就会出错。
将复合数据类型从发送者发送到接收者的正确方法是什么?
我还在Julia 讨论页面上发现了类似的问题,但该操作使用 UDPSocket 解决了该问题。我也尝试过,但它使用了reinterpret函数。而且reinterpret函数不会将Signal数据类型转换为UInt或其他类型。
你能帮忙吗?
BR
ps 顺便说一句,我使用的是 Julia 版本 1.0.3。
小智 5
使用您的示例,您可以使用 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
记住: