自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java Socket通訊客戶端代碼詳解

開發(fā) 后端
Java Socket通訊一直是很多程序員的一塊心病,下面我們就來看看如何才能更好的使用相關(guān)的代碼。希望大家有所幫助。

Java Socket通訊一個相當廣泛的使用,其實在有些時候我們在遇到困難的時候還是需要去找一找相關(guān)代碼的介紹。最近工作需要,做了一點Java Socket通訊的東西,積累一點經(jīng)驗,與大家共分享。

其中通過短連接方式接收Java Socket通訊返回消息,死循環(huán),分別判斷接收和超時,來確定連接連接狀況。通過字節(jié)流的形式獲取socket返回消息,主要是因為通過readline的方式,在我們系統(tǒng)通訊中存在異常。

具體客戶端代碼如下:

 

  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("-->未知的主機名:" + 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"; //超時標志為真,返回超時碼  
  73. if (!received) str ="2190";  
  74. socket.close();  
  75. } catch (UnknownHostException e) {  
  76. log.error("---->出現(xiàn)未知主機錯誤! 主機信息=" + this.hostName + 
    " 端口號="  
  77. + this.portNum + " 出錯信息=" + e.getMessage());  
  78. str = "2191";  
  79. // System.exit(1);  
  80. } catch (IOException e) {  
  81. log.error("---->出現(xiàn)IO異常! 主機信息=" + 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. }  

以上就是對Java Socket通訊的詳細介紹。希望大家有所幫助。

【編輯推薦】

  1. Java線程模型如何完善相關(guān)的數(shù)據(jù)處理
  2. Java線程死鎖如何避免這一悲劇
  3. Java線程同步鎖解決共享數(shù)據(jù)安全
  4. Java線程同步如何在不同線程中調(diào)用
  5. Java線程同步的優(yōu)先級介紹
責任編輯:張浩 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-03-18 17:30:46

Java Socket

2010-03-18 17:39:46

Java Socket

2010-03-17 18:04:55

java Socket

2014-08-11 16:35:35

KafkaJava客戶端

2010-05-12 15:46:51

Subversion客

2010-03-19 09:26:34

Java Socket

2009-03-04 10:27:50

客戶端組件桌面虛擬化Xendesktop

2010-04-08 15:35:13

Oracle 簡易客戶

2020-04-23 09:32:33

zookeeperCP系統(tǒng)

2010-06-01 14:11:11

TortoiseSVN

2013-06-08 09:59:15

VMwarevSphere Web

2009-07-24 17:31:56

ASP.NET AJA

2010-05-31 15:55:42

2010-03-18 17:47:07

Java 多客戶端通信

2017-01-11 10:38:17

MySQL客戶端代碼

2010-04-21 12:57:33

RAC負載均衡配置

2009-08-21 16:14:52

服務(wù)端與客戶端通信

2010-03-18 15:44:22

VSTS 2010VS 2010

2021-04-30 08:19:32

SpringCloud客戶端負載Ribbo

2011-08-17 10:10:59

點贊
收藏

51CTO技術(shù)棧公眾號