在工作中我设计用于控制机器人组的用户界面之间的联网。机器人使用UDP广播来管理彼此的移动。Java的客户端的Socket和C++(升压型)服务器
的GUI需要能够传达给机器人。为此,运行中间服务器。所有机器人都会听它(使用UDP传感器),并且所有正在运行的GUI都会连接到它(通过TCP)。它管理GUI < - >机器人通信。
然而,服务器用C++编写Boost库和GUI是用Java编写的,有些问题与网络正在发生。我很容易地用套接字连接服务器:
try {
socket = new Socket(targetAddress, targetPort);
} catch (IOException e) { e.printStackTrace(); }
服务器注册连接,一切都很好。
然而,当我尝试发送字符串:
try {
stream.writeUTF(message);
stream.flush();
} catch (IOException e) { e.printStackTrace(); }
注:我最初是用一个PrintWriter来一次发送串一个(的println()),但切换到DataOutputStream类,看看它是否会帮帮我。
我们遇到的问题。即使Java成功,Boost甚至不会注册我发送的消息。此外,当从服务器发送字符串时,它们的格式不可识别。
寻找到问题的一点建议,加速自动添加“标题”文本到它发送的所有邮件,帮助其存档接收消息。由于Java没有这样做,所以这可能是原因。它是否正确?如果是这样,我们如何解决它?
的几个注意事项:
- 由于时间所限,切换到不同的库/语言大规模是不是一个真正的选择。但是,如果存在允许服务器接收我发送的消息的C++ TCP库,并且我们可以很容易地将其集成,那将是完美。
- 当连接到Java服务器时,Java网络代码完美工作。 Boost-Java界面似乎遇到了困难。
- 不幸的是,我自己或其他人对这个项目的工作方面是有经验的网络。 :(我的经验是用Java和GUI开发,和其他人是AI程序员/硬件专家。这个问题的任何及所有的帮助将是令人难以置信的欢迎。
你用来构造这些消息的协议是什么? –
你是什么意思?我们现在只是测试直接发送字符串数据。上面列出了Java代码的核心。 Boost代码基于Boost Asio TCP Synchronous示例。 – Kronos
TCP是一个字节流。我在问接收机应该有多少字节?有头文件吗?有没有定点值? –