接口对接成功,可以通信,但数据在那边处理出现问题可是又看不到
我使用的是writeBytes()方法发送数据,会不会有问题
DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
dataout.writeBytes(parm);//发送数据
parm是json格式字符串:
parm={"eid":"L18QMX0000001","uid":"123123","type":"validate","data":{user:"123456"},"sign":"d4878baa9b5b6a7185246570ec376a36"}
或者我怎样知道我发送过去的数据是什么?
Socket client=new Socket("localhost",8888);
String json=dataToJson(getData());
BufferedWriter bw=new BufferedWriter(
new OutputStreamWriter(client.getOutputStream()));
bw.write(json);
bw.flush();
bw.close();
//===================
Socket client =server.accept();
BufferedInputStream bus=new BufferedInputStream(client.getInputStream());
byte[] b=new byte[20480];
int len=bus.read(b);
String requestInfo=new String(b,0,len).trim();
System.out.println(requestInfo);
//===========服务器=======结果
{"errorCode":0,"reason":"ok","result":[{"id":1,"question":"12344556","answer":"12344556","item1":"12344556","item2":"12344556","item3":"12344556","item4":"12344556","explains":"12344556","url":"00000000000"}]}
什么连接,走网络的可以用wireshark抓
code 1002是什么意思,错误码是怎么定义的
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
BufferedWriter 可直接处理字符串纯文本。
DataOutputStream 是处理 8个基本数据类型和String类型的。是带格式的。
dataout.writeUTF(parm); 直接写文本输出。
发送端:
DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
dataout.writeUTF(parm);;//发送数据
接受端(服务器端):
BufferedInputStream bus=new BufferedInputStream(client.getInputStream());
int len=0;
byte[] flush=new byte[20480];
len=bus.read(flush);
System.out.println(len);
System.out.println(new String(flush,0,len));
如果是http协议, 就用apache httpclient或者spring的resttemplate
传输json设置http header
content-type application/json
写出用:DataOutputStream,读取:也要DataInputStream.他们是有格式的。
你写出不要用DataOutputStream写出。读取这端:你参考下
//从服务器读取 json数据
public static String requestJson(String httpUrl, String httpArg) {
BufferedReader reader = null;
String result = null;
StringBuffer sbf = new StringBuffer();
httpUrl = httpUrl + "?" + httpArg;
try {
URL url = new URL(httpUrl);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setRequestMethod("GET");
// 填入apikey到HTTP header
// connection.setRequestProperty("apikey", "9e2741ac99724e74b50158d5b63e85f4");
connection.connect();
InputStream is = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String strRead = null;
while ((strRead = reader.readLine()) != null) {
sbf.append(strRead);
sbf.append("\r\n");
}
reader.close();
result = sbf.toString();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
我刚去看了,apache,HttpServletResponse response,jdk,它采用的是response.getWriter().println(json); 里面实际是PrintWriter 流的println(String x).
你去看看。
//客户端
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import mine.jktk.bean.JsonRootBean;
import mine.jktk.bean.Result;
public class ClientDemo01 {
public static void main(String[] args) throws Exception, IOException {
Socket client=new Socket("localhost",8888);
String json=dataToJson(getData());
/*BufferedWriter bw=new BufferedWriter(
new OutputStreamWriter(client.getOutputStream()));
bw.write(json);
bw.flush();
bw.close();*/
PrintWriter pw=new PrintWriter(client.getOutputStream(),true);
pw.write(json);
System.out.println(json);
//=====
}
public static List getData(){
int id=1;
String question="12344556";
String answer="12344556";
String item1="12344556";
String item2="12344556";
String item3="12344556";
String item4="12344556";
String explains="12344556";
String url="00000000000";
Result result=new Result(id,question,answer,item1,item2,item3,item4,
explains,url);
List list=new ArrayList();
list.add(result);
return list;
}
public static String dataToJson(List list){
JsonRootBean jrootb=new JsonRootBean();
jrootb.setErrorCode(0);
jrootb.setReason("ok");
jrootb.setResult(list);
Gson gs=new Gson();
String json=gs.toJson(jrootb);
return json;
}
}
//==============java bean
public class Result {
private int id;
private String question;
private String answer;
private String item1;
private String item2;
private String item3;
private String item4;
private String explains;
private String url;
public Result() {
super();
}
public Result(int id, String question, String answer, String item1, String item2, String item3, String item4,
String explains, String url) {
this.id = id;
this.question = question;
this.answer = answer;
this.item1 = item1;
this.item2 = item2;
this.item3 = item3;
this.item4 = item4;
this.explains = explains;
this.url = url;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setQuestion(String question) {
this.question = question;
}
public String getQuestion() {
return question;
}
public void setAnswer(String answer) {
this.answer = answer;
}
public String getAnswer() {
return answer;
}
public void setItem1(String item1) {
this.item1 = item1;
}
public String getItem1() {
return item1;
}
public void setItem2(String item2) {
this.item2 = item2;
}
public String getItem2() {
return item2;
}
public void setItem3(String item3) {
this.item3 = item3;
}
public String getItem3() {
return item3;
}
public void setItem4(String item4) {
this.item4 = item4;
}
public String getItem4() {
return item4;
}
public void setExplains(String explains) {
this.explains = explains;
}
public String getExplains() {
return explains;
}
public void setUrl(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
@Override
public String toString() {
return "Result [id=" + id + ", question=" + question + ", answer=" + answer + ", item1=" + item1 + ", item2="
+ item2 + ", item3=" + item3 + ", item4=" + item4 + ", explains=" + explains + ", url=" + url + "]";
}
}
import java.util.List;
//import org.codehaus.jackson.annotate.JsonIgnoreProperties;
//import org.codehaus.jackson.annotate.JsonProperty;
/**
@website http://www.bejson.com/java2pojo/
*/
public class JsonRootBean {
//@JsonProperty("error_code")
//此处属性的声明顺序,决定json数据的对应字段的顺序
private int errorCode;
private String reason;
private List result;
public void setResult(List result) {
this.result = result;
}
public List getResult() {
return result;
}
public void setErrorCode(int errorCode) {
this.errorCode = errorCode;
}
public int getErrorCode() {
return errorCode;
}
public void setReason(String reason) {
this.reason = reason;
}
public String getReason() {
return reason;
}
@Override
public String toString() {
return "JsonRootBean [errorCode=" + errorCode + ", reason=" + reason + ", result=" + result + "]";
}
}
//服务器端=======我试过了,可以接受
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo1 {
private ServerSocket ser=null;
public static void main(String[] args) {
new ServerDemo1().start();
}
public void start(){
//创建服务器并启动
try {
ser=new ServerSocket(8888);
Socket sk=ser.accept();//监听客户端
this.recieve(sk);
} catch (IOException e) {
e.printStackTrace();
}
}
private void recieve(Socket sk){
try {
BufferedReader bis=new BufferedReader(new InputStreamReader(sk.getInputStream()));
StringBuilder sb=new StringBuilder();
System.out.println("=======================");
String msg=null;
while((msg=bis.readLine()).length()>0){
sb.append(msg);
sb.append("\r\n");
}
//接收客户端(浏览器)请求信息
String requestInfo=sb.toString().trim();//去除空格,处理数据方便
System.out.println(requestInfo);
} catch (IOException e) {
//e.printStackTrace();
}
}
public void stop(){
}
}