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);
你的善良帮助后,我现在用的OutputStream和它的作品。 记住要删除ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
否则它会输出4个字符到C ++服务器。
您使用的ObjectOutputStream
,这确实Java对象序列化 。 这不是(容易),跨语言的便携。 既然你只发送一个字符串,你并不需要使用ObjectOutputStream
-只是使用OutputStream
从插座返回。
我强烈建议使用一些第三方库的对象的序列化。 做手工是非常耗时的,(你),而且容易出错。
我的个人超级粉丝谷歌协议缓冲器 。 我积极地使用它在几乎所有的项目(Java服务器,.Net客户端,C ++客户端)的。
它是什么? 协议缓冲器处于高效而可扩展的格式编码的结构化数据的方法。 谷歌使用协议缓冲器,用于几乎所有的内部RPC协议和文件格式。
针对不同的语言实现的名单是在这里 。
你也可以使用JNI在C ++方面应对反序列化的东西。
Java对象直接使用C ++不能反序列化。
更新你的代码不使用的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();
}
如果没有,请通过编辑您的问题张贴两个更新的客户端和服务器端代码。