我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java中怎么实现 Socket通信

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java中怎么实现 Socket通信

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

下载Word文档

猜你喜欢

Java中怎么实现 Socket通信

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

Socket通信怎么实现

本篇内容介绍了“Socket通信怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!TCP/IP、UDP、Socket对TCP/IP、UD
2023-06-26

C#怎么实现Socket通信

这篇文章给大家分享的是有关C#怎么实现Socket通信的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下: //创建socket对象 //第一个参数:设置网络寻址的协议、第二参数设置数据
2023-06-14

Silverlight中怎么利用Socket实现通信

这篇文章将为大家详细讲解有关Silverlight中怎么利用Socket实现通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一.Silverlight的Socket通信和控制台、WinFo
2023-06-17

C#之Socket通信怎么实现

这篇文章主要介绍“C#之Socket通信怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#之Socket通信怎么实现”文章能帮助大家解决问题。一、socket是什么Socket是应用层与TC
2023-06-30

怎么在Android中实现Socket通信传输

今天就跟大家聊聊有关怎么在Android中实现Socket通信传输,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Socket本质上就是Java封装了传输层上的TCP协议(注:UDP用
2023-05-30

Android中socket通信简单实现

Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP。 先上个图:这里以一个APP作为服务器跟客户端为示例 1、添加网络访问权限2、写服务器,在AP
2022-06-06

Android中socket通信的简单实现

Android中socket通信简单实现,供大家参考,具体内容如下 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP。 先上个图:这里以一个APP作为服务器跟客户端为示例 1、添加网络访
2022-06-07

JAVA中实现原生的 socket 通信机制原理

本文介绍了JAVA中实现原生的 socket 通信机制原理,分享给大家,具体如下:当前环境jdk == 1.8知识点 socket 的连接处理 IO 输入、输出流的处理 请求数据格式处理 请求模型优化场景今天,和大家聊一下 JAVA
2023-05-31

java如何利用socket通信实现Modbus-RTU通信协议

小编给大家分享一下java如何利用socket通信实现Modbus-RTU通信协议,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ModbusModbus是一种串行
2023-06-14

php能实现socket通信吗

php能实现socket通信,其实现方法:1、在客户端创建“socketsocket_create();”并向服务器请求连接“socket_connect();”;2、在服务端创建“socketsocket_create();”并绑定IP和端口号“socket_bind();”;3、通过“socket_wirte();socket_read”读客户端的消息或给客户端写消息即可。
2023-05-14

Java中的单线程通信如何利用 Socket实现

这期内容当中小编将会给大家带来有关Java中的单线程通信如何利用 Socket实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java Socket实现单线程通信的方法,具体如下:现在做Java直接使用
2023-05-31

Java中怎么实现一个Socket通讯客户端

Java中怎么实现一个Socket通讯客户端,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java Socket通讯代码
2023-06-17

Java中socket通信的原理是什么

Java中socket通信的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java.net.Socket继承于java.lang.Object,有八个
2023-06-17

php能不能实现socket通信

这篇文章主要介绍了php能不能实现socket通信的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php能不能实现socket通信文章都会有所收获,下面我们一起来看看吧。php能实现socket通信,其实现方法:
2023-07-05

怎么使用Java socket通信模拟QQ实现多人聊天室

这篇文章主要介绍“怎么使用Java socket通信模拟QQ实现多人聊天室”,在日常操作中,相信很多人在怎么使用Java socket通信模拟QQ实现多人聊天室问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎
2023-07-02

Java中怎么实现Socket编程

这篇文章给大家介绍Java中怎么实现Socket编程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。TCP和UDP通信关于socket编程我们有两种通信协议可以进行选择。一种是数据报通信,另一种就是流通信。数据报通信数据
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录