import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* socket通讯工具类
* @author wpj_service
*
*/
public class SocketUtil {
private static final String ADDRESS = "127.0.0.1";
private static final String PORT = "19";
public static ResponseBean getResponseXML(String message){
ResponseBean response = new ResponseBean();
try {
Socket socket = new Socket(ADDRESS, Integer.parseInt(PORT));
//输出流
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
//输入流
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
//向服务器写入数据
pw.write(message);
pw.flush();
socket.shutdownOutput();
//接收服务器的相应
String reply=null;
StringBuilder sb=new StringBuilder();
while(!((reply=br.readLine())==null)){
sb.append(reply.trim());
}
response.setData(sb.toString());
response.setIsSuccess(true);
//关闭资源
br.close();
is.close();
pw.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
response.setIsSuccess(false);
response.setMessage("内部连接失败");
LoggerUtil.insertLog("Socket连接失败");
} catch (IOException e) {
response.setIsSuccess(false);
response.setMessage("内部通讯出错");
LoggerUtil.insertLog("Socket通讯出错");
e.printStackTrace();
} catch (Exception e) {
response.setIsSuccess(false);
response.setMessage("内部通讯解析失败");
LoggerUtil.insertLog("Socket通讯解析失败");
e.printStackTrace();
}
return response;
}
}
可以返回对象也可以返回其他类型,这样封装耦合更少。
响应对象:
import java.util.Map;
public class ResponseBean {
private Boolean isSuccess;
private String message;
private String data;
private Map<String,Object> more;
public Boolean getIsSuccess() {
return isSuccess;
}
public void setIsSuccess(Boolean isSuccess) {
this.isSuccess = isSuccess;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public Map<String, Object> getMore() {
return more;
}
public void setMore(Map<String, Object> more) {
this.more = more;
}
}