入参是请求报文+字节码文件+结束标识(END)
public StringBuffer sendData(String msg, Map<String,byte[]> fileByte, String end){
Socket socket=null;
BufferedReader br=null;
OutputStream out=null;
StringBuffer resp = new StringBuffer();
try{
logger.info("host地址为:"+host+"port端口为:"+port);
socket=new Socket(host,port);
br=new BufferedReader(new InputStreamReader(socket.getInputStream(),ENCODE_GBK));//ENCODE_GBK编码格式
out=socket.getOutputStream();
//将入参转成字节码写入
out.write(msg.getBytes(ENCODE_GBK));
//将存放文件的map拆开分别将每一个文件写入
for (String fileKey : fileByte.keySet()) {
byte[] bytes = fileByte.get(fileKey);
out.write(fileKey.getBytes(ENCODE_GBK));
out.write(bytes);
}
//将结束标识写入
out.write(end.getBytes(ENCODE_GBK));
out.flush();
//循环获取返回内容
while(br.read() != -1){
String str = br.readLine();
resp.append(str);
}
return resp;
}catch(Exception e){
logger.error("接口发送数据异常",e.getMessage());
e.printStackTrace();
return resp;
}finally {
logger.debug("socketClient关闭链接");
if(br!=null){
try{
br.close();
out.close();
socket.close();
}catch(Exception e){
throw new RuntimeException("socketClient关闭异常",e);
}
}
}
}
有更好的写法可以交流一下