Java利用Socket实现通讯客户端的代码怎么写
java
socket
具体客户端代码如下:
<ol class=" list-paddingleft-2"> <li><p>import java.net.*; </p></li> <li><p>import java.io.*; </p></li> <li><p>import org.apache.log4j.Logger; </p></li> <li><p>public class SocketClient { </p></li> <li><p>static Logger log = Logger.getLogger(SocketClient.class.<br>getName()); //日志记录信息 </p></li> <li><p>private String hostName; </p></li> <li><p>private int portNum; </p></li> <li><p>private int delaySecond; // 发文接收返回报文延时 </p></li> <li><p>public SocketClient() { </p></li> <li><p>this.hostName = "192.168.0.1"; </p></li> <li><p>this.portNum = 7000; </p></li> <li><p>this.delaySecond = 50000; </p></li> <li><p>pFileOp = null; </p></li> <li><p>} </p></li> <li><p>private Socket getSocket() { </p></li> <li><p>Socket socket = null; </p></li> <li><p>try { </p></li> <li><p>socket = new Socket(hostName, portNum); </p></li> <li><p>} catch (UnknownHostException e) { </p></li> <li><p>System.out.println("-->未知的主机名:" + hostName + " 异常"); </p></li> <li><p>} catch (IOException e) { </p></li> <li><p>System.out.println("-hostName=" + hostName + " portNum=" </p></li> <li><p>+ portNum + "---->IO异常错误" + e.getMessage()); </p></li> <li><p>} </p></li> <li><p>return socket; </p></li> <li><p>} </p></li> <li><p>public String sendMessage(String strMessage) { </p></li> <li><p>String str = ""; </p></li> <li><p>String serverString = ""; </p></li> <li><p>Socket socket; </p></li> <li><p>try { </p></li> <li><p>socket = getSocket(); </p></li> <li><p>// socket.setKeepAlive(true); </p></li> <li><p>if (socket == null) { // 未能得到指定的Socket对象,Socket通讯为空 </p></li> <li><p>return "0001"; </p></li> <li><p>} </p></li> <li><p>PrintWriter out = new PrintWriter(socket.getOutputStream()); </p></li> <li><p>//log.info("---->发送报文="+strMessage); </p></li> <li><p>out.println(strMessage); </p></li> <li><p>out.flush(); </p></li> <li><p>BufferedReader in = new BufferedReader(new InputStreamReader( </p></li> <li><p>socket.getInputStream())); </p></li> <li><p>long sendTime = System.currentTimeMillis(); </p></li> <li><p>long receiveTime = System.currentTimeMillis(); </p></li> <li><p>boolean received = false; // 成功接收报文 </p></li> <li><p>boolean delayTooLong = false; </p></li> <li><p>serverString = null; </p></li> <li><p>while (!received && !delayTooLong) { </p></li> <li><p>if (socket.getInputStream().available() > 0) { </p></li> <li><p>// serverString = in.readLine(); </p></li> <li><p>char tagChar[]; </p></li> <li><p>tagChar = new char[1024]; </p></li> <li><p>int len; </p></li> <li><p>String temp; </p></li> <li><p>String rev = ""; </p></li> <li><p>if ((len = in.read(tagChar)) != -1) { </p></li> <li><p>temp = new String(tagChar, 0, len); </p></li> <li><p>rev += temp; </p></li> <li><p>temp = null; </p></li> <li><p>} </p></li> <li><p>serverString = rev; </p></li> <li><p>} </p></li> <li><p>receiveTime = System.currentTimeMillis(); </p></li> <li><p>if (serverString != null) </p></li> <li><p>received = true; // 字符串不为空,接收成功 </p></li> <li><p>if ((receiveTime - sendTime) > delaySecond) </p></li> <li><p>delayTooLong = true; // 接收等待时间过长,超时 </p></li> <li><p>} </p></li> <li><p>in.close(); </p></li> <li><p>out.close(); </p></li> <li><p>str=serverString; </p></li> <li><p>if (delayTooLong) str="2190"; //超时标志为真,返回超时码 </p></li> <li><p>if (!received) str ="2190"; </p></li> <li><p>socket.close(); </p></li> <li><p>} catch (UnknownHostException e) { </p></li> <li><p>log.error("---->出现未知主机错误! 主机信息=" + this.hostName + <br>" 端口号=" </p></li> <li><p>+ this.portNum + " 出错信息=" + e.getMessage()); </p></li> <li><p>str = "2191"; </p></li> <li><p>// System.exit(1); </p></li> <li><p>} catch (IOException e) { </p></li> <li><p>log.error("---->出现IO异常! 主机信息=" + this.hostName + <br>" 端口号=" </p></li> <li><p>+ this.portNum + " 出错信息=" + e.getMessage()); </p></li> <li><p>e.printStackTrace(); </p></li> <li><p>str = "2191"; </p></li> <li><p>} catch (Exception e) { </p></li> <li><p>str="2177"; </p></li> <li><p>log.error("---->出现未知异常" + e.getMessage()); </p></li> <li><p>} finally { </p></li> <li><p>socket = null; </p></li> <li><p>str.trim(); </p></li> <li><p>//log.info("--->返回的socket通讯字符串="+str); </p></li> <li><p>return str; </p></li> <li><p>} </p></li> <li><p>} </p></li> <li><p>} </p></li> </ol>
登录后复制
以上是Java利用Socket实现通讯客户端的代码怎么写的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
刺客信条阴影:贝壳谜语解决方案
2 周前
By DDD
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前
By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

Java是热门编程语言,适合初学者和经验丰富的开发者学习。本教程从基础概念出发,逐步深入讲解高级主题。安装Java开发工具包后,可通过创建简单的“Hello,World!”程序实践编程。理解代码后,使用命令提示符编译并运行程序,控制台上将输出“Hello,World!”。学习Java开启了编程之旅,随着掌握程度加深,可创建更复杂的应用程序。
