JavaSocket通讯客户端代码详解

Java Socket通讯一个相当广泛的使用,其实在有些时候我们在遇到困难的时候还是需要去找一找相关代码的介绍。最近工作需要,做了一点Java Socket通讯的东西,积累一点经验,与大家共分享。

其中通过短连接方式接收Java Socket通讯返回消息,死循环,分别判断接收和超时,来确定连接连接状况。通过字节流的形式获取socket返回消息,主要是因为通过readline的方式,在我们系统通讯中存在异常。

具体客户端代码如下:

 
 
 
  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; // 发文接收返回报文延时
  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("---->发送报文="+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("---->出现未知主机错误! 主机信息=" + this.hostName + 
    " 端口号="
  77. + this.portNum + " 出错信息=" + e.getMessage());
  78. str = "2191";
  79. // System.exit(1);
  80. } catch (IOException e) {
  81. log.error("---->出现IO异常! 主机信息=" + this.hostName + 
    " 端口号="
  82. + this.portNum + " 出错信息=" + e.getMessage());
  83. e.printStackTrace();
  84. str = "2191";
  85. } catch (Exception e) {
  86. str="2177";
  87. log.error("---->出现未知异常" + e.getMessage());
  88. } finally {
  89. socket = null;
  90. str.trim();
  91. //log.info("--->返回的socket通讯字符串="+str);
  92. return str;
  93. }
  94. }
  95. }

以上就是对Java Socket通讯的详细介绍。希望大家有所帮助。

网页题目:JavaSocket通讯客户端代码详解
本文URL:http://www.csdahua.cn/qtweb/news44/420344.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网