iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中怎么实现 Socket通信
  • 938
分享到

Java中怎么实现 Socket通信

2023-06-17 15:06:12 938人浏览 安东尼
摘要

本篇文章为大家展示了Java中怎么实现 Socket通信,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。长连接、短链接只是针对客户端而言,服务器无所谓长、短;无论同步或者异步通信,发送之后务必要又响应

本篇文章为大家展示了Java中怎么实现 Socket通信,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

长连接、短链接只是针对客户端而言,服务器无所谓长、短;

无论同步或者异步通信,发送之后务必要又响应回复,确认收到,负责进行一定范围内重发,例如重发三次;

长连接服务器与客户端之间务必需要心跳探测,由客户端主动发起;

短连接服务器通用代码:

  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通信,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: Java中怎么实现 Socket通信

本文链接: https://www.lsjlt.com/news/290331.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中怎么实现 Socket通信
    本篇文章为大家展示了Java中怎么实现 Socket通信,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。长连接、短链接只是针对客户端而言,服务器无所谓长、短;无论同步或者异步通信,发送之后务必要又响应...
    99+
    2023-06-17
  • Socket通信怎么实现
    本篇内容介绍了“Socket通信怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!TCP/IP、UDP、Socket对TCP/IP、UD...
    99+
    2023-06-26
  • C#怎么实现Socket通信
    这篇文章给大家分享的是有关C#怎么实现Socket通信的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下: //创建socket对象     &nb...
    99+
    2023-06-14
  • Silverlight中怎么利用Socket实现通信
    这篇文章将为大家详细讲解有关Silverlight中怎么利用Socket实现通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一.Silverlight的Socket通信和控制台、WinFo...
    99+
    2023-06-17
  • C#之Socket通信怎么实现
    这篇文章主要介绍“C#之Socket通信怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#之Socket通信怎么实现”文章能帮助大家解决问题。一、socket是什么Socket是应用层与TC...
    99+
    2023-06-30
  • 怎么在Android中实现Socket通信传输
    今天就跟大家聊聊有关怎么在Android中实现Socket通信传输,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Socket本质上就是Java封装了传输层上的TCP协议(注:UDP用...
    99+
    2023-05-30
    android socket
  • java如何利用socket通信实现Modbus-RTU通信协议
    小编给大家分享一下java如何利用socket通信实现Modbus-RTU通信协议,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ModbusModbus是一种串行...
    99+
    2023-06-14
  • JAVA中实现原生的 socket 通信机制原理
    本文介绍了JAVA中实现原生的 socket 通信机制原理,分享给大家,具体如下:当前环境jdk == 1.8知识点 socket 的连接处理 IO 输入、输出流的处理 请求数据格式处理 请求模型优化场景今天,和大家聊一下 JAVA...
    99+
    2023-05-31
    java socket 通信
  • php能实现socket通信吗
    php能实现socket通信,其实现方法:1、在客户端创建“socketsocket_create();”并向服务器请求连接“socket_connect();”;2、在服务端创建“socketsocket_create();”并绑定IP和...
    99+
    2023-05-14
    php socket
  • php实现socket简单通信
    WebSocket的作用? WebSock其实在平常使用,我们是时常见到的,用于实时通讯,例如我们常用的实时聊天、服务端向客户端消息推送、也可以实现踢用户下线功能。实时弹幕功能等等。 什么是握手...
    99+
    2023-09-15
    php 服务器 网络
  • Java中的单线程通信如何利用 Socket实现
    这期内容当中小编将会给大家带来有关Java中的单线程通信如何利用 Socket实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java Socket实现单线程通信的方法,具体如下:现在做Java直接使用...
    99+
    2023-05-31
    java socket 单线程通信
  • Java中socket通信的原理是什么
    Java中socket通信的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java.net.Socket继承于java.lang.Object,有八个...
    99+
    2023-06-17
  • java与as3的socket通信
    as3 与java 都提供了Socket类用于网络通信, 但两者的使用也有较大的不同. 为了方便两者的通信, 我在做了一些实验的基础上, 写下获得的经验,以免忘记.as3 的socket 读写数据方法常用的有四个: readUTF, wri...
    99+
    2023-01-31
    通信 java socket
  • php能不能实现socket通信
    这篇文章主要介绍了php能不能实现socket通信的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php能不能实现socket通信文章都会有所收获,下面我们一起来看看吧。php能实现socket通信,其实现方法:...
    99+
    2023-07-05
  • Android Socket通信的简单实现
    公司要实现一个简单的聊天功能,提前研究一下Socket通信,而公司的服务端功能又没有实现,所以这里就把服务端的功能放到一个界面实现了。 直接上代码: <?xml v...
    99+
    2024-04-02
  • Java中怎么实现一个Socket通讯客户端
    Java中怎么实现一个Socket通讯客户端,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java Socket通讯代码 <xml version="...
    99+
    2023-06-17
  • java利用socket通信实现Modbus-RTU通信协议的示例代码
    Modbus Modbus是一种串行通信协议。Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,...
    99+
    2024-04-02
  • Java聊天室之使用Socket实现通信功能
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目实现:使用套接字实现了服务器端与客户端的通信。 运行程序,在服务器端的文本框中输入信息,然后按回车键,客户端就会收到服务器端...
    99+
    2022-11-13
    Java实现聊天室 Java聊天室 Java Socket 通信
  • 怎么使用Java socket通信模拟QQ实现多人聊天室
    这篇文章主要介绍“怎么使用Java socket通信模拟QQ实现多人聊天室”,在日常操作中,相信很多人在怎么使用Java socket通信模拟QQ实现多人聊天室问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-07-02
  • php怎么使用socket简单实现通信功能
    这篇文章主要讲解了“php怎么使用socket简单实现通信功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php怎么使用socket简单实现通信功能”吧!WebSocket的作用WebSo...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作