溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java利用Socket實現(xiàn)通訊客戶端的代碼怎么寫

發(fā)布時間:2022-05-23 15:39:06 來源:億速云 閱讀:526 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹了Java利用Socket實現(xiàn)通訊客戶端的代碼怎么寫的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java利用Socket實現(xiàn)通訊客戶端的代碼怎么寫文章都會有所收獲,下面我們一起來看看吧。

具體客戶端代碼如下:

  1. import java.net.*;  

  2. import java.io.*;  

  3. import org.apache.log4j.Logger;  

  4. public class SocketClient {  

  5. static Logger log = Logger.getLogger(SocketClient.class.
    getName()); //日志記錄信息  

  6. private String hostName;  

  7. private int portNum;  

  8. private int delaySecond; // 發(fā)文接收返回報文延時  

  9. public SocketClient() {  

  10. this.hostName = "192.168.0.1";  

  11. this.portNum = 7000;  

  12. this.delaySecond = 50000;  

  13. pFileOp = null;  

  14. }  

  15. private Socket getSocket() {  

  16. Socket socket = null;  

  17. try {  

  18. socket = new Socket(hostName, portNum);  

  19. } catch (UnknownHostException e) {  

  20. System.out.println("-->未知的主機(jī)名:" + hostName + " 異常");  

  21. } catch (IOException e) {  

  22. System.out.println("-hostName=" + hostName + " portNum="  

  23. + portNum + "---->IO異常錯誤" + e.getMessage());  

  24. }  

  25. return socket;  

  26. }  

  27. public String sendMessage(String strMessage) {  

  28. String str = "";  

  29. String serverString = "";  

  30. Socket socket;  

  31. try {  

  32. socket = getSocket();  

  33. // socket.setKeepAlive(true);  

  34. if (socket == null) { // 未能得到指定的Socket對象,Socket通訊為空  

  35. return "0001";  

  36. }  

  37. PrintWriter out = new PrintWriter(socket.getOutputStream());  

  38. //log.info("---->發(fā)送報文="+strMessage);  

  39. out.println(strMessage);  

  40. out.flush();  

  41. BufferedReader in = new BufferedReader(new InputStreamReader(  

  42. socket.getInputStream()));  

  43. long sendTime = System.currentTimeMillis();  

  44. long receiveTime = System.currentTimeMillis();  

  45. boolean received = false; // 成功接收報文  

  46. boolean delayTooLong = false;  

  47. serverString = null;  

  48. while (!received && !delayTooLong) {  

  49. if (socket.getInputStream().available() > 0) {  

  50. // serverString = in.readLine();  

  51. char tagChar[];  

  52. tagChar = new char[1024];  

  53. int len;  

  54. String temp;  

  55. String rev = "";  

  56. if ((len = in.read(tagChar)) != -1) {  

  57. temp = new String(tagChar, 0, len);  

  58. rev += temp;  

  59. temp = null;  

  60. }  

  61. serverString = rev;  

  62. }  

  63. receiveTime = System.currentTimeMillis();  

  64. if (serverString != null)  

  65. received = true; // 字符串不為空,接收成功  

  66. if ((receiveTime - sendTime) > delaySecond)  

  67. delayTooLong = true; // 接收等待時間過長,超時  

  68. }  

  69. in.close();  

  70. out.close();  

  71. str=serverString;  

  72. if (delayTooLong) str="2190"; //超時標(biāo)志為真,返回超時碼  

  73. if (!received) str ="2190";  

  74. socket.close();  

  75. } catch (UnknownHostException e) {  

  76. log.error("---->出現(xiàn)未知主機(jī)錯誤! 主機(jī)信息=" + this.hostName + 
    " 端口號="  

  77. + this.portNum + " 出錯信息=" + e.getMessage());  

  78. str = "2191";  

  79. // System.exit(1);  

  80. } catch (IOException e) {  

  81. log.error("---->出現(xiàn)IO異常! 主機(jī)信息=" + this.hostName + 
    " 端口號="  

  82. + this.portNum + " 出錯信息=" + e.getMessage());  

  83. e.printStackTrace();  

  84. str = "2191";  

  85. } catch (Exception e) {  

  86. str="2177";  

  87. log.error("---->出現(xiàn)未知異常" + e.getMessage());  

  88. } finally {  

  89. socket = null;  

  90. str.trim();  

  91. //log.info("--->返回的socket通訊字符串="+str);  

  92. return str;  

  93. }  

  94. }  

關(guān)于“Java利用Socket實現(xiàn)通訊客戶端的代碼怎么寫”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Java利用Socket實現(xiàn)通訊客戶端的代碼怎么寫”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI