Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在不同编程语言(Java<;->;CoDeSys)之间通过TCP套接字发送结构_Java_Sockets_Object_Tcp_Codesys - Fatal编程技术网

在不同编程语言(Java<;->;CoDeSys)之间通过TCP套接字发送结构

在不同编程语言(Java<;->;CoDeSys)之间通过TCP套接字发送结构,java,sockets,object,tcp,codesys,Java,Sockets,Object,Tcp,Codesys,我需要通过TCP套接字发送一个结构(由布尔、整数和字符串组成)。发送器(PLC)用CoDeSys实现,接收器用Java实现一种解决方案是用数据创建一个大字符串,通过套接字发送数据,然后用Java将其交互。但这似乎非常低效(因为struct有50多个变量) 是否有其他方法发送结构(例如,在Java中有序列化,但在CoDeSys中不支持) 如果不是,什么是格式化数据的好方法(例如:“variableName1:value1;variableName2:value2;…) 有没有什么“技巧”可以自动将

我需要通过TCP套接字发送一个结构(由布尔、整数和字符串组成)。发送器(PLC)用CoDeSys实现,接收器用Java实现
一种解决方案是用数据创建一个大字符串,通过套接字发送数据,然后用Java将其交互。但这似乎非常低效(因为struct有50多个变量) 是否有其他方法发送结构(例如,在Java中有序列化,但在CoDeSys中不支持) 如果不是,什么是格式化数据的好方法<代码>(例如:“variableName1:value1;variableName2:value2;…)
有没有什么“技巧”可以自动将字符串中的值分配给Java端的对象?

我个人使用XML。地球上每一种像样的语言都能解析它,在Codesys中创建它并不荒谬

您还忘记了序列化数据可能包含特定于平台的异常,例如Java
double
与Codesys
REAL
。这些可能并不总是在没有考虑的情况下以串行方式和平转移。还存在字节交换问题,具体取决于平台

Codesys有Base64编码/解码库,尽管这不会比我认为的XML更有效


另外,如果您真的担心效率,关于XML。。。谁说它必须是有条理的。只要你知道你的语言可以正确地粘合在一起,就可以作弊一点。

这到底是为什么看起来效率低下?这正是你应该做的。TCP是一种字节流协议,因此您应该定义要交换的字节流,并编写代码来发送和接收该字节流。好吧,当有这么多变量时,将结构转换为字符串并将其转换回似乎是一项艰巨的任务。例如,Java中的序列化更容易实现。使用XML或JSON来放置您的数据如何?可能更结构化?@M0zart如果不将结构转换为比特串,您认为“序列化”意味着什么?@Parasu谢谢,这是个好主意。我可能会这样做:在Java上,我必须自己在CoDeSys端实现XML字符串。