通信学习小结
学习通信已有半个月的时间了,对于io,刚接触时只觉得这完全是一个全新的领域,无从下手,初期也只是通过分析胡哥,强哥例举的代码和教材上的代码示例寻找规律,其中的弯路可没少走。然而,通过这么一段时间的接触和不断的尝试,验证,也掌握了一些基本的知识,但又总感觉自己仿佛是在原地打转,没向前走不远,便又退回来对一些基础的东西进行新一轮的审视,提出一些或许一觉醒来就会觉得无比幼稚的问题。通过这么一段磕磕碰碰学习,不能说收货颇丰,但也总算是对自己有些交代了。
在我的眼中,通信的对象只有两种,主机端和客户端,而我们要做的,就是让这两者之间实现实时的信息交换。就代码流程而言,二者存在一定的区别,主机端:1、ServerSocket一个主机端对象,并绑定一个计算机开放的端口;2、Socket一个连接对象client(客户机),通过ServerSocket.accept()等待客户机接入;至此一个主机端建立完成;客户机:Socket一个client对象并指定接入的主机IP和端口即可。就服务器和客户机的本质而言,二者不过是相互的向对方发送消息,又相互读取对方所发来的消息,并无主机和客户之分,他们的核心内容是读写消息的方法,就读写方法而言,主机和客户机是平等的。下面将进行详细说明。
首先说读取消息,在读取消息之前,我们要知道从那读取,这就需要一个指定的Socket 对象,我们称其为连接对象client(我们可以将其理解为连接两者的通道),接下来要做的,就是从client对象上取得输出流并封装:
InputStream ins = client.getInputStream();//得到输入流
BufferedReader br = new BufferedReader (ins);//封装
得到输出流后开始读取消息
while (true) {
String line = null;
while (null != (line = (br.readLine()))) {
System.out.println("从服务器端得到的信息:" + line);
}
client.close();//关闭连接对象
}
至此读取消息的基本流程便走完了。
再来说说发送消息。与读取消息一样,首先我们要取得一个 Socket 对象client,在client之上取得输出流:
OutputStream ous = client.getOutStream();//得到输出流
BufferedWriter bw = new BufferedWriter (ous);//封装
开始向输出流中写入消息并发送:
String str ;//要发送的消息
bw.write(str+ "\r"); //将消息格式优化并写入
bw.flush(); //强制输出
client.close();//关闭连接对象
发送消息完毕。
在实现主机端与单个客户机实现界面聊天的项目中,其各自读写消息的方法大同小异,上述的读写方法二者都能使用。在实现群聊的项目中,只需要给主机端添加一个线程来保存连接对象(接入的客户机),在添加一个群发消息(给所有客户机发送收到的消息)的方法即可,有待实现!
注:文章中的代码是直接敲上去的。在实际操作中会抛出异常,其处理异常的代码需要在实际操作中自行添加!
相关推荐
在Java程序员的眼中,Linux操作系统扮演着至关重要的角色。它是一个免费、开源的类Unix系统,为开发和运行Java应用程序提供了稳定、安全且高效的平台。Linux不仅被广泛应用于服务器领域,也是许多分布式系统和云计算...
在Java开发者的眼中,华为无疑是中国IT行业的巨头,其面试流程严谨,技术要求高。这份“华为Java面试题总结”旨在为准备进入华为的Java工程师提供一些关键知识点的梳理和复习指导。以下是对这些面试题核心内容的详细...
【标题】:“我眼中的SNS” 在当今的互联网时代,SNS(Social Networking Service,社交网络服务)已经成为人们生活中不可或缺的一部分。SNS平台通过提供一个互动、分享和交流的在线环境,使得用户能够建立和维护...
标题中的"MontaVista眼中的Linux与移动电话"表明,MontaVista公司是这个领域的专家,他们认为Linux在移动设备上的应用有着巨大的潜力。MontaVista是一家专注于嵌入式Linux系统的公司,他们的观点具有权威性。 描述...
### AJAX学习指南——Java爱好者的导师 #### 一、AJAX定义 AJAX(Asynchronous JavaScript and XML,异步JavaScript和XML)是一种用于创建更快、更高效、更友好的Web应用程序的技术组合。它并不是一种单一的技术,...
在描述中提到的效果,“成熟的人眼里满是前途,稚嫩的人眼里满是爱恨情仇”,就是通过调用Hitokoto API获取到的一条随机语录,它来源于《网易云热评》,展现了这个功能的实际应用。 该调用代码主要涉及以下几个知识...
这份简历是一位年轻的男性软件工程师,23岁,汉族,毕业于清华大学,本科专业为通信工程。他的联系方式是888888888888,邮箱为docer@163.com。简历展示了他在软件开发领域的扎实基础和实践经验。 在项目经验部分,...
在我眼里,这个词是中性的,极客不代表一个人有多牛,而是他的钻研态度、好奇心以及对新技术的识别和接受能力。张丹这本书给大家提供了一条通向R极客之路,但这绝对不是终点。希望读者通过这本书能感受到作者探索的...
也别问我是什么硬件工程师,电源、单片机、高频、通信……你会做你就上!给你个嵌入式工程师的头衔你就是软件硬件小能手,堪比全栈工程师。 先从硬件说起: 硬件要做一款产品很不容易,要考虑各种方案的选型,...
9. **软件开发**:参赛者应具备良好的编程习惯,掌握至少一种高级编程语言,如Python、Java等。同时,了解软件工程原理,如需求分析、软件测试和版本控制。 10. **系统集成与调试**:整合所有硬件和软件组件,形成...
综上所述,尽管“一种便签纸盒”看起来是一个简单的日常用品,但在IT专业人士的眼中,它涵盖了物联网技术、嵌入式系统、用户体验设计、软件开发和数据可视化等多个领域的知识点。这样的创新设计体现了信息技术如何...
5. **AS400/iSeries接口**:讲解如何与其他系统进行集成,如通过FTP、API或Web服务通信。 6. **Git-Book实践**:利用Git进行版本控制和协作编辑,如何将文档托管在GitBook上,以及如何参与开源项目。 7. **IBM i...
它支持Java编程模型,提供全面的电子商务基础设施,特别强调Web服务技术,使得不同系统间的交互变得更加简单和安全。 【安全性与集成性】 IBM的Web服务解决方案在安全性方面表现出色,对于像CSN这样的公共服务机构...
3. **后端开发**:后端处理数据存储、逻辑处理和服务器通信。常见的后端技术有PHP、Python的Django或Flask、Java的Spring Boot等。数据库管理,如MySQL、MongoDB或PostgreSQL,也至关重要,用于存储和检索网站所需的...
4. **物联网项目**:在DIY爱好者和开发者的眼中,DHT11因其简单易用和成本低廉,常被用于各种物联网项目,如远程环境监控系统。 ### 四、使用注意事项 1. **电源电压**:DHT11的工作电压范围一般为3.3V至5.5V,过...
例如,在编写多线程程序时,如何设计锁机制以避免死锁,如何有效地利用进程间通信(IPC)机制进行数据交换,这些都要求程序员具备深入的操作系统知识。而对于在移动平台上工作的开发者,例如Android开发者,虽然平台...
然而,由于提供的信息有限,我将主要围绕PHP这一标签来展开讨论,假设"辅助细菌"是与PHP相关的开发工具、库或框架。 PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,特别适合Web开发,可以...