日期:2014-05-20  浏览次数:20766 次

java socket通讯,java调用c++服务器
package com.ewanshang.zhongyintong.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class HJClient {

public static void main(String[] args) throws IOException {
Socket socket = null;
InputStream is = null;
OutputStream os = null;
String ip = "192.168.2.193";
try {

socket = new Socket(ip, 8888);

// 发送信息
os = socket.getOutputStream();

os.write("测试测试".getBytes());
os.flush();

is = socket.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is));

byte[] b = new byte[1024];
int flag = 0;
while ((flag = is.read(b)) != -1) {//一直不返回-1
System.out.println(new String(b));
}

os.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
if (null != socket) {
socket.close();
}
}

}
Java

------解决方案--------------------
要看客户端和服务端之间的协议。
我指的是,建立在TCP协议基础上的通信协议。
TCP协议,只保证数据的可靠抵达,但是,不会按每次方法的调用将数据分组。
区分每次调用方法发送的数据,要考自己定义协议来完成。

比如,以回车符作为本次发送结束的标识符;
或者,发送信息前,先发送本次发送信息的长度数据,再发送数据;
还有每次只发送固定长度的信息,不够长度的信息以0填充;
等等。
关键是要看,双方都采用的是什么协议。