Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/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客户端发送到C++;服务器? 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);_Java_C++_Sockets_Client - Fatal编程技术网

如何将数据从Java客户端发送到C++;服务器? 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);

如何将数据从Java客户端发送到C++;服务器? 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);,java,c++,sockets,client,Java,C++,Sockets,Client,在您的帮助下,我现在使用outputstream,它可以正常工作。记住删除ObjectOutputStream oos=newObjectOutputStream(sock.getOutputStream()) >/St>.< /P> < p>您还可以在C++侧使用JNI来处理反序列化的东西。 不能直接使用C++ C++对java对象进行反序列化。< /p> 更新代码后不使用ObjutOutsPoString,我猜您的问题要么是在C++服务器上,要么是因为在套接字上传输之前没有将字符串转换成AS

在您的帮助下,我现在使用outputstream,它可以正常工作。记住删除
ObjectOutputStream oos=newObjectOutputStream(sock.getOutputStream()) 你使用的是一个,它确实如此。这不容易跨语言移植。由于您只发送字符串,因此不需要使用
ObjectOutputStream
-只需使用从套接字返回的
OutputStream

我强烈建议使用第三方库对对象进行序列化。手动操作非常耗时(对您而言),而且容易出错

我个人是个超级粉丝。我在几乎所有的项目中都使用它(java server,.NET客户端,C++客户端)。 这是什么? 协议缓冲区是一种以高效但可扩展的格式对结构化数据进行编码的方法。谷歌几乎所有的内部RPC协议和文件格式都使用协议缓冲区


不同语言的实现列表是<> > >/St>.< /P> < p>您还可以在C++侧使用JNI来处理反序列化的东西。


不能直接使用C++ C++对java对象进行反序列化。< /p> 更新代码后不使用ObjutOutsPoString,我猜您的问题要么是在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();
}

如果没有,请通过编辑您的问题发布更新的客户端和服务器端代码。

您没有提供足够的信息来确定问题所在,但首先,
oos.flush()
应该在
oos.writeObject()之后,而不是之前。谢谢,我现在将.flush()移到末尾,我可以把java客户端的数据发送到C++服务器,奇怪的是,从第四个位置开始存储的数据(不知道为什么0到3个位置不被使用)。当我在C++侧打印出接收到的数据时,打印0到3的结果是两个?有人知道第一个四个位置是怎么使用的吗?@格雷格科夫感谢你的友好通知,我改为OutPoSt流,现在,我可以把数据从java客户端发送到C++服务器,奇怪的是,从第四个位置开始存储的数据(不知道为什么不使用0到3个位置)。当我在C++侧打印出接收到的数据时,打印0到3的结果是两个?有人知道前四个位置的用途吗?虽然我同意您应该显式地设置要使用的编码,但考虑到测试字符串只是“test”,这将映射到几乎任何编码方案中的正确位置,我不认为这最终会成为问题。(我想说的是,平台的默认编码方案很可能在“底部”有ASCII字符集,所以“测试”应该可以工作)。是的,实际上不需要在其中添加“US-ASCII”仍然可以工作