C++-c++做服务器端监听端口,Java做客户端进行通信,socket编程

C++-c++做服务器端监听端口,Java做客户端进行通信,socket编程

想挽留 发布于 2016-11-27 字数 943 浏览 1205 回复 5

就是用JAVA做的客户端,在做与服务器通信的时候,由于在java里面都是字符,而在C++里面字符就是字节,所以需要在JAVA的action类里面把参数转换为字节传过去,我是这样写的:

try{ 
Socket socket = new Socket("192.168.10.6", 13024);//参数为服务器的IP地址和端口号
OutputStream streanm = socket.getOutputStream();//建立服务器连接
byte[] param = initParam(getTargetNo());
streanm.write(param);
param = initParam(getDeviceType());
streanm.write(param);
param = initParam("str3");//这里应该是时间
streanm.write(param);
streanm.close();
socket.close();
} catch (Exception ex) {
}

public static byte[] initParam(String param) {

byte[] tempBytes = param.getBytes();
byte[] paramBytes = new byte[tempBytes.length + 1];
paramBytes[0] = (byte) param.length();
for (int i = 0; i < tempBytes.length; i++) {
paramBytes[i + 1] = tempBytes[i];
}
return paramBytes;
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

虐人心 2017-10-23 5 楼

本问题的主要关键点是字节序的问题,即big ending和little ending的问题。如果是同一种语言,write和read都是相同的字节序,所以没有任何问题,但是如果是混合语言操作,用一种语言写,用另外一种语言读,如果两者的字节序不一样,就不能保证操作的正确性了。举例来说,java的writeInt是按照big ending写出的,即低位在高字节,高位在低字节。但是对于x86系列上的C语言,readInt是按照little ending方式来读取数据的,即低位在低字节,高位在高字节。所以使用这两种语言来互操作,如果不做特殊处理,肯定是没法自然对接的。当然如果序列号的内容是以字节为单位的,例如UTF8,可以保证读写操作和字节序无关。(注:本体的网络应用可以完全简化成,用java语言写文件,然后用c语言来读文件,这样就可以清楚的区分出问题的根本所在。)

清晨说ぺ晚安 2017-10-05 4 楼

客户端连接的端口是139,而服务器端监听的是8080.改成一样再试一下。

晚风撩人 2017-09-12 3 楼

需要注意的两点:
1.字节序问题。
2.java 按普通流方式发送时(比如,xml)底层会在前面默认加 2 字节的头长。

瑾兮 2017-08-11 2 楼

如果你打算用不同的语言来完成通信功能,为什么不尝试thrift或者是ice之类的软件架构工具呢,这些工具的最大方便之处就是实现跨语言的网络通信

虐人心 2016-12-26 1 楼

在 streanm.write(param); 后面加上 streanm.flush(); 试试呢...
你要把AcceptTherad 这个的代码贴出来.