我試過這個,但沿線的某處我無法讀取服務器的響應。 (響應以XML格式)。通過java套接字發送xml字符串的最佳方式是什麼?
我已經讀過,寫入套接字需要緩衝,因爲字符串破損。不知何故,當我使用jaxb unmarshaller時,我發現這是真的,並且它報告了一個SAX EOF異常,這意味着讀取的xml不完整。
請問我如何緩衝寫入和緩衝區讀取正確?
StringBuilder sb = new StringBuilder();
sb.append("<estel>");
sb.append("<header><requesttype>").append(hd.getRequestType()).append("</requesttype></header>");
sb.append("<request>");
sb.append("<agentcode>").append(rq.getAgentCode()).append("</agentcode>");
sb.append("<pin>").append(rq.getPin()).append("</pin>");
sb.append("<destination>").append(rq.getDestination()).append("</destination>");
sb.append("<agenttransid>").append(rq.getAgentTransId()).append("</agenttransid>");
sb.append("<vendorcode>").append(rq.getVendorCode()).append("</vendorcode>");
sb.append("<amount>").append(rq.getAmount()).append("</amount>");
sb.append("<productcode>").append(rq.getProductCode()).append("</productcode>");
sb.append("<comments>").append(rq.getComments()).append("</comments>");
sb.append("<clienttype>").append(rq.getClientType()).append("</clienttype>");
sb.append("</request></estel>");
Socket socket = new Socket("41.206.23.21",7101);
OutputStream os = socket.getOutputStream();
InputStream in = socket.getInputStream();
OutputStream buf = new BufferedOutputStream(os);
out = new OutputStreamWriter(buf);
System.out.printf("\nxml is %s",sb.toString());
System.out.print("\n--------writing--to--socket-----");
out.write(sb.toString());
out.flush();
//read response
InputStream bui = new BufferedInputStream(in);
rd = new InputStreamReader(bui);
System.out.print("\nxml response"+rd.toString());
in.close();
out.close();
socket.close();
你說的僅僅適用於HTTP POST請求。普通插座有一個直接的行爲。 – jboi