中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Java中怎么實現 Socket通信

發布時間:2021-07-20 14:01:51 來源:億速云 閱讀:168 作者:Leah 欄目:編程語言

本篇文章為大家展示了Java中怎么實現 Socket通信,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

1.長連接、短鏈接只是針對客戶端而言,服務器無所謂長、短;

2.無論同步或者異步通信,發送之后務必要又響應回復,確認收到,負責進行一定范圍內重發,例如重發三次;

3.長連接服務器與客戶端之間務必需要心跳探測,由客戶端主動發起;

4.短連接服務器通用代碼:

  1. package com.biesan.sms.gate.unioncom.communication;  

  2. import com.biesan.commons.Constants;  

  3. import com.biesan.commons.util.CodeUtil;  

  4. import com.biesan.sms.gate.unioncom.data.*;  

  5. import com.biesan.sms.gate.unioncom.util.GateInfo;  

  6. import java.net.*;  

  7. import java.io.*;  

  8. import java.util.*;  

  9. import org.apache.log4j.*;  

  10. import spApi.*;  

  11. public class UnioncomDeliver extends Thread {  

  12. // stop flag  

  13. private boolean unInterrupt = true;  

  14. private boolean unErr = true;  

  15. //private boolean closeSocketFlag = false;  

  16. // server socket  

  17. private ServerSocket serverSo = null;  

  18. // current socket  

  19. private Socket so = null 

  20. private OutputStream output = null;  

  21. private InputStream input = null;  

  22. // gate command  

  23. private SGIP_Command tmpCmd = null;  

  24. private SGIP_Command cmd = null;  

  25. private Bind bind = null;  

  26. private BindResp bindResp = null;  

  27. //private Unbind unBind = null;  

  28. private UnbindResp unBindResp = null;  

  29. private boolean unAcceptErrorFlag = true;  

  30. Logger unioncomLog = Logger.getLogger(Unioncom
    Deliver.class.getName());  

  31. public UnioncomDeliver() {  

  32. }  

  33. public void run() {  

  34. unioncomLog.info("Start...");  

  35. while (unInterrupt) {  

  36. this.initServer();  

  37. this.startServices();  

  38. while (this.unAcceptErrorFlag) {  

  39. try {  

  40. //接受連接請求  

  41. unioncomLog.info("before accept connection!....... 
    FreeMemroy :" + Runtime.getRuntime().freeMemory());  

  42. this.acceptConnection();  

  43. unioncomLog.info("after accept connection!....... 
    FreeMemroy :" + Runtime.getRuntime().freeMemory());  

  44. while (unErr) {  

  45. cmd = new Command();  

  46. unioncomLog.info("before read command from stream
    ........... FreeMemroy: " + Runtime.getRuntime().
    freeMemory());  

  47. tmpCmd = cmd.read(input);  

  48. unioncomLog.info("after read command from stream " + 
    getCommandString(cmd.getCommandID()) + " FreeMemroy: " + 
    Runtime.getRuntime().freeMemory());  

  49. if (tmpCmd == null) {  

  50. unErr = false;  

  51. break;  

  52. }  

  53. switch (cmd.getCommandID()) {  

  54. // biad ready communication  

  55. case SGIP_Command.ID_SGIP_BIND: {  

  56. this.dealBind();  

  57. break;  

  58. }// exit bind  

  59. case SGIP_Command.ID_SGIP_UNBIND: {  

  60. this.dealUnBind();  

  61. unioncomLog.info("after unbind connection!....... 
    FreeMemroy :" + Runtime.getRuntime().freeMemory());  

  62. break;  

  63. }// deliver  

  64. ....  

  65. default : //錯誤的命令字  

  66. break;  

  67. }// switch  

  68. }// while(unErr)  

  69. } catch (Exception e) {  

  70. unioncomLog.error("Unioncom Recv Service Error"  

  71. + e.getMessage());   

  72. } finally {  

  73. if (this.so != null) {  

  74. this.closeSocket();  

  75. }  

  76. this.unErr = true;  

  77. }  

  78. }// while (this.unAcceptErrorFlag)  

  79. try {  

  80. this.closeServerSocket();  

  81. sleep(200);// sleep  

  82. } catch (InterruptedException ie) {  

  83. }  

  84. }// while(unInterrupt)  

  85. }  

  86. private String getCommandString(int cmd){  

  87. switch (cmd) {  

  88. // biad ready communication  

  89. case SGIP_Command.ID_SGIP_BIND: {  

  90. return " BIND COMMAND ";   

  91. }// exit bind  

  92. case SGIP_Command.ID_SGIP_UNBIND: {  

  93. return " UNBIND COMMAND ";   

  94. }// deliver  

  95. case ...  

  96. default:  

  97. return " UNKNOWN COMMAND";   

  98. }  

  99. }  

  100. private void dealBind() {  

  101. try {  

  102. bind = new Bind(tmpCmd);  

  103. if (bind.readbody() != 0) {  

  104. unioncomLog.warn("Read Bind error");  

  105. this.unErr = false;  

  106. }  

  107. bindResp = new BindResp(tmpCmd.getMsgHead());  

  108. bindResp.SetResult(0);  

  109. bindResp.write(output);  

  110. unioncomLog.debug("Bind success!");  

  111. } catch (Exception e) {  

  112. unioncomLog.error("Dela Union Recv Bind Error!" + 
    e.getMessage());  

  113. this.unErr = false;  

  114. }  

  115. }  

  116. private void dealUnBind() {  

  117. try {  

  118. //unBind = (Unbind) tmpCmd;  

  119. unBindResp = new UnbindResp(tmpCmd.getMsgHead());  

  120. unBindResp.write(output);  

  121. unioncomLog.debug("UnBind success!");  

  122. } catch (Exception e) {  

  123. unioncomLog.warn("Unbind error!" + e.getMessage());  

  124. }  

  125. this.unErr = false;  

  126. }  

  127. private void startServices() {  

  128. boolean unStartServices = true;  

  129. while (unStartServices) {  

  130. try {  

  131. serverSo = new ServerSocket(ugInfo.getLocalServerPort(), 5,  

  132. InetAddress.getByName(ugInfo.getLocalIpAdd()));  

  133. //serverSo.setSoTimeout(60000);  

  134. unStartServices = false;   

  135. unioncomLog.info("Create union recv socket Ok!");  

  136. } catch (IOException e) {  

  137. unioncomLog.warn("Create union recv socket error!"  

  138. + e.getMessage());  

  139. unStartServices = true;  

  140. UnioncomSubmit.thrSlp(3000);  

  141. }  

  142. }  

  143. }  

  144. private void acceptConnection() {  

  145. // Accept 失敗  

  146. try {   

  147. so = serverSo.accept();  

  148. so.setSoTimeout(10000);  

  149. } catch (Exception e) {  

  150. unioncomLog.warn("Accept Error!" + e.getMessage());  

  151. this.closeServerSocket();  

  152. this.unAcceptErrorFlag = false;  

  153. this.unErr=false;  

  154. }  

  155. // Accept成功  

  156. try {  

  157. input = so.getInputStream();  

  158. output = so.getOutputStream();  

  159. } catch (IOException e) {  

  160. unioncomLog.warn("Get I/O stream Error!" + e.getMessage());  

  161. this.closeService();  

  162. this.unAcceptErrorFlag = false;  

  163. this.unErr=false;  

  164. }  

  165. }  

  166. private void closeSocket() {  

  167. try {  

  168. so.close();  

  169. unioncomLog.info("Socket Close Success!!!");  

  170. } catch (Exception e) {  

  171. unioncomLog.error("Socket Close Failure!!!" + e.getMessage());  

  172. }  

  173. }  

  174. private void closeServerSocket() {  

  175. try {  

  176. serverSo.close();  

  177. unioncomLog.info("ServerSocket Close Success!!!");  

  178. } catch (Exception e) {  

  179. unioncomLog  

  180. .error("ServerSocket Close Failure!!!" + e.getMessage());  

  181. }  

  182. }  

  183. private void closeService() {  

  184. this.closeSocket();  

  185. this.closeServerSocket();  

  186. }  

  187. private void initServer() {  

  188. this.bind = null;  

  189. this.bindResp = null;  

  190. //this.unBind = null;  

  191. this.unBindResp = null;  

  192. this.tmpCmd = null;  

  193. this.cmd = null;  

  194. this.serverSo = null;  

  195. this.so = null;  

  196. this.output = null;  

  197. this.input = null;  

  198. this.unErr = true;  

  199. //this.closeSocketFlag = false;  

  200. unioncomLog.info("Memory***==="  

  201. + java.lang.Runtime.getRuntime().freeMemory());  

  202. }  

  203. public synchronized void requireStop() {  

  204. this.unInterrupt = false;  

  205. unioncomLog.info("Requre interrupt!!!");  

  206. }  

  207. public String convertMsgContentCoding
    (int msgCoding, byte[] msgContent) {  

  208. String deliverContent = null;  

  209. try {  

  210. if (msgContent != null) {  

  211. if (msgCoding == 8) { // 處理ucs32編碼  

  212. deliverContent = new String(msgContent,  

  213. "UnicodeBigUnmarked");  

  214. } else if (msgCoding == 0) { // 處理ASCII編碼  

  215. deliverContent = new String(msgContent, "ASCII");  

  216. } else if (msgCoding == 4) { // 處理binary編碼  

  217. deliverContent = new String(msgContent);  

  218. } else if (msgCoding == 15) { // 處理GBK編碼  

  219. deliverContent = new String(msgContent, "GBK");  

  220. // 處理DELIVER數據包的短信息ID  

  221. } else {  

  222. unioncomLog.error("編碼格式錯誤!");  

  223. return "";  

  224. }  

  225. } else  

  226. return "";  

  227. return deliverContent;  

  228. } catch (UnsupportedEncodingException ex) {  

  229. unioncomLog.error("deal content error!" +
     ex.getMessage());  

  230. return "";  

  231. }  

  232. }  

上述內容就是Java中怎么實現 Socket通信,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

略阳县| 大同县| 河曲县| 武平县| 治县。| 安丘市| 南涧| 龙州县| 革吉县| 济源市| 江门市| 阿巴嘎旗| 凤翔县| 勃利县| 陇南市| 章丘市| 丹凤县| 黄浦区| 西昌市| 东辽县| 德兴市| 武功县| 平顶山市| 罗定市| 如皋市| 崇明县| 洮南市| 诸暨市| 远安县| 海盐县| 怀来县| 珲春市| 吉首市| 福清市| 土默特右旗| 措勤县| 仙游县| 澎湖县| 衡东县| 故城县| 西峡县|