Types Julia中通过TCP读取复合类型

Types Julia中通过TCP读取复合类型,types,tcp,type-conversion,julia,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 !!! 另一方面,发送方零件代码: using Sock

我正在尝试通过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))

现在,当我尝试阅读时,问题就出现了!接收器,参考。如果我写读!接收器,REF信号,然后我得到分段错误,程序退出。如果我写了读了!接收器,信号的类型,然后我得到错误

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

我还发现了一个类似的问题,但o.p.用UDPSocket解决了这个问题。我也试过了,但它使用了reinterpret函数。重新解释函数不会将信号数据类型转换为UInt或其他类型

你能帮忙吗

B.R


p、 顺便说一下,我正在使用Julia 1.0.3版。

以您的示例为例,您可以使用Julia的本机序列化功能:

发送: 接收 请记住:

Julias本机序列化仅适用于相同的系统体系结构和Julia版本。 如果您需要标准化的协议,您可以查看
使用您的示例,您可以使用Julia的本机序列化功能:

发送: 接收 请记住:

Julias本机序列化仅适用于相同的系统体系结构和Julia版本。 如果您需要标准化的协议,您可以查看
你可以用我使用的Julia版本1.0.3来解决这个问题。文件中的方法要求1.1;3个中的2个。1.0.3中提供了实现此功能所需的序列化函数。在1.1中添加了对文件名进行操作的,非常感谢。现在解决了:你能写出你的解决方案吗?所以我可以给你们一个投票:你们可以用我使用的Julia版本1.0.3来解决这个问题。文件中的方法要求1.1;3个中的2个。1.0.3中提供了实现此功能所需的序列化函数。在1.1中添加了对文件名进行操作的,非常感谢。现在解决了:你能写出你的解决方案吗?所以我可以投你一票:
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