如何将数据从 Java 客户机发送到C++服务器
How can I send data from a Java client to a C++ server?
Java 客户机可以使用 TCP 连接到C++服务器。Java 客户端位于 Win7 上。C++服务器在 Linux 上。
问题是我无法将数据成功发送到C++服务器。 Java 代码是:
public static void main (String [] args ) throws IOException {
Socket sock = new Socket("10.217.140.200",7000);
String id = "TEST";
char encoding = 'a';
ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
oos.flush();
oos.writeObject(encoding);
在您的帮助之后,我现在使用输出流并且可以工作。 请记住删除ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
否则它将向 c++ 服务器输出 4 个字符。
您正在使用执行 Java 对象序列化的 ObjectOutputStream
。 这不能(容易)跨语言移植。 由于您只发送字符串,因此不需要使用ObjectOutputStream
- 只需使用从套接字返回的OutputStream
即可。
我强烈建议使用一些第三方库来序列化您的对象。手动执行此操作非常耗时(对您来说)且容易出错。
我个人是谷歌协议缓冲区的忠实粉丝。我几乎在所有项目(Java服务器,.Net客户端C++客户端)上都积极使用它。
这是什么?协议缓冲区是一种以高效且可扩展的格式对结构化数据进行编码的方法。Google 将协议缓冲区用于几乎所有内部 RPC 协议和文件格式。
不同语言的实现列表在这里。
在C++端使用 JNI 来处理反序列化的东西。
不能直接使用 C++ 反序列化 Java 对象。
更新代码以不使用 ObjectOutputStream 后,我猜测您的问题要么出在C++服务器中,要么是因为在通过套接字传输之前没有将字符串转换为 ASCII。Java 字符串可以用各种编码表示,包括 Unicode。
这对你有用吗?
public static void main (String [] args ) throws IOException
{
Socket sock = new Socket("10.217.140.200",7000);
String id = "TEST";
OutputStream oos = sock.getOutputStream();
oos.write( id.getBytes("US-ASCII") );
oos.flush();
}
如果没有,请通过编辑您的问题来发布更新的客户端和服务器端代码。
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 从服务器传输到客户端的消息不会出现
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- OpenSSL TLS服务器-使用客户端证书白名单
- 我正在开发服务器,ip作为参数传递不起作用
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- 如何在 Minecraft 服务器上执行命令
- 调试编译的服务器在数据库打开时崩溃
- C++套接字客户端到 Python 服务器未创建连接
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- 将相机数据从服务器实时流式传输到客户端
- 为什么创建服务器后C++ httplib 库阻塞了我的主线程?
- 每个服务器请求的内存预算
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- 使用嵌入式猫鼬服务器托管应用程序
- NodeJs 服务器充斥着 UDP 广播,不发送响应