Java Socket通訊客戶端代碼詳解
作者:佚名
Java Socket通訊一直是很多程序員的一塊心病,下面我們就來看看如何才能更好的使用相關(guān)的代碼。希望大家有所幫助。
Java Socket通訊一個相當廣泛的使用,其實在有些時候我們在遇到困難的時候還是需要去找一找相關(guān)代碼的介紹。最近工作需要,做了一點Java Socket通訊的東西,積累一點經(jīng)驗,與大家共分享。
其中通過短連接方式接收Java Socket通訊返回消息,死循環(huán),分別判斷接收和超時,來確定連接連接狀況。通過字節(jié)流的形式獲取socket返回消息,主要是因為通過readline的方式,在我們系統(tǒng)通訊中存在異常。
具體客戶端代碼如下:
- import java.net.*;
- import java.io.*;
- import org.apache.log4j.Logger;
- public class SocketClient {
- static Logger log = Logger.getLogger(SocketClient.class.
getName()); //日志記錄信息- private String hostName;
- private int portNum;
- private int delaySecond; // 發(fā)文接收返回報文延時
- public SocketClient() {
- this.hostName = "192.168.0.1";
- this.portNum = 7000;
- this.delaySecond = 50000;
- pFileOp = null;
- }
- private Socket getSocket() {
- Socket socket = null;
- try {
- socket = new Socket(hostName, portNum);
- } catch (UnknownHostException e) {
- System.out.println("-->未知的主機名:" + hostName + " 異常");
- } catch (IOException e) {
- System.out.println("-hostName=" + hostName + " portNum="
- + portNum + "---->IO異常錯誤" + e.getMessage());
- }
- return socket;
- }
- public String sendMessage(String strMessage) {
- String str = "";
- String serverString = "";
- Socket socket;
- try {
- socket = getSocket();
- // socket.setKeepAlive(true);
- if (socket == null) { // 未能得到指定的Socket對象,Socket通訊為空
- return "0001";
- }
- PrintWriter out = new PrintWriter(socket.getOutputStream());
- //log.info("---->發(fā)送報文="+strMessage);
- out.println(strMessage);
- out.flush();
- BufferedReader in = new BufferedReader(new InputStreamReader(
- socket.getInputStream()));
- long sendTime = System.currentTimeMillis();
- long receiveTime = System.currentTimeMillis();
- boolean received = false; // 成功接收報文
- boolean delayTooLong = false;
- serverString = null;
- while (!received && !delayTooLong) {
- if (socket.getInputStream().available() > 0) {
- // serverString = in.readLine();
- char tagChar[];
- tagChar = new char[1024];
- int len;
- String temp;
- String rev = "";
- if ((len = in.read(tagChar)) != -1) {
- temp = new String(tagChar, 0, len);
- rev += temp;
- temp = null;
- }
- serverString = rev;
- }
- receiveTime = System.currentTimeMillis();
- if (serverString != null)
- received = true; // 字符串不為空,接收成功
- if ((receiveTime - sendTime) > delaySecond)
- delayTooLong = true; // 接收等待時間過長,超時
- }
- in.close();
- out.close();
- str=serverString;
- if (delayTooLong) str="2190"; //超時標志為真,返回超時碼
- if (!received) str ="2190";
- socket.close();
- } catch (UnknownHostException e) {
- log.error("---->出現(xiàn)未知主機錯誤! 主機信息=" + this.hostName +
" 端口號="- + this.portNum + " 出錯信息=" + e.getMessage());
- str = "2191";
- // System.exit(1);
- } catch (IOException e) {
- log.error("---->出現(xiàn)IO異常! 主機信息=" + this.hostName +
" 端口號="- + this.portNum + " 出錯信息=" + e.getMessage());
- e.printStackTrace();
- str = "2191";
- } catch (Exception e) {
- str="2177";
- log.error("---->出現(xiàn)未知異常" + e.getMessage());
- } finally {
- socket = null;
- str.trim();
- //log.info("--->返回的socket通訊字符串="+str);
- return str;
- }
- }
- }
以上就是對Java Socket通訊的詳細介紹。希望大家有所幫助。
【編輯推薦】
責任編輯:張浩
來源:
互聯(lián)網(wǎng)