网络通信,实际上就是在不同机器上的两个程序间的字节(本质上是二进制位)传输。
一般情况下,两个通信的程序中,一个是请求者,我们称之为客户端,另一个是等待被请求者,这就是服务器。
简单服务器创建格式比较简单,格式如下:
java.net.ServerSocket server = new java.net.ServerSocket(9090);
其中的参数9090,指的是创建服务器时所使用的端口号。
每台电脑上都有65536个端口号,服务器在指定的端口上等待客户机的连接进入。
创建好服务器对象后,接下来就是等待客户机连入:
java.net.Socket client = server.accept();//等待客户机连接进入
//这个方法会阻塞,它会一直等待直到有客户机连接进入,才会执行后面的代码
客户机连接进入后,就可以获取到客户机的输入输出流对象
java.io.InputStream ins = client.getInputStream();
java.io.OutputStream ous = client.getOutputStream();
通过输出流对象(ous),可以将字节流发送给客户机;
通过输入流对象(ins),可以接收到从客户机发送过来的字节流;
使用输入流的read()方法时,也会阻塞,它会一直等待,直到有字节传过来。
创建服务器是比较简单的,而定义双方的通信规则才是关键。
传送的字节流在何处表示一条消息,这是我们要思考的。现在学习的结束标志是"\r\n",我们可以根据自己的想法,自己定义规则。
如XMPP协议格式,使用XML式的结构来定义通信协议。可以自己定义在标签<msg>和标签</msg>之间的内容即为一次通信发送的一条完整消息。
我们要思考的还有代码重构,以及模块化设计。
选择增加一个新类,还是在原来的类里面增加功能;
是否将某些代码封装成一个独立的方法,何时封装;
这些都没有一个统一的标准,只有通过不断地练习,不断地思考、总结,才能逐渐写出高质量的代码。
我认为,每一个类都应该只负责单一方面的功能,如ChatTools类,表示的是通信工具类,它只负责消息的转发,保存处理客户的线程队列。
同时还要考虑,一个类是否要实例化,如果我们只是使用类中的方法,而不需要实例化该类,那么我们就将方法定义为静态的。
为了不给这个类有实例化的机会,我们还要将这个类的构造函数私有化。
类中的代码尽量封装成独立的方法,这样不仅可以方便重复调用,减少代码冗余,而且思路也会更清晰。
在练习中还有一个问题需要谨慎对待。
方法中的可能出现的异常是在方法中处理掉(即在方法中使用try{}catch(Excrption e){}处理),
还是直接将异常抛给上层调用者(即throws Exception),由上层调用者去处理。
如果在方法中处理掉时,应该避免上层调用者出现死循环。
分享到:
相关推荐
在Android系统应用开发中,网络通信是至关重要的一个环节,特别是在构建交互性强的应用时。本实验旨在让学生深入了解Android网络通信技术,并通过实际操作掌握不同类型的网络通信方式,包括利用WebView实现浏览器...
网络通信年终总结.docx
总结来说,这个“网络通信开发包”以C++语言为核心,结合了控件、源码和丰富的资源,为开发者构建网络应用提供了强大支持。它不仅简化了网络通信的实现过程,还通过清晰的文档和源码,帮助开发者提升技能,实现更...
Linux与Windows系统间的网络通信 Linux与Windows系统间的网络通信是计算机网络领域中的一个重要话题。本文将介绍Linux与Windows系统间的网络通信的实现方法,包括 Socket 编程的工作原理和 Linux 与 Windows 不同...
总结来说,西门子工业网络通信指南上册是一份专门为工业控制网络技术提供指导的资料,其中涵盖了西门子工业网络通信的基础知识、技术要点以及应用实例等。通过学习和实践指南中的内容,技术人员可以提升对西门子工业...
嵌入式Linux网络通信程序开发 本篇论文主要讨论了基于Linux操作系统的嵌入式网络通信程序开发,特别是基于AX88796网卡驱动程序的开发。文章首先介绍了当前网络的重要性和嵌入式系统的发展趋势,然后详细分析了Linux...
基于 ARM9 的嵌入式 Linux 网络通信系统设计与实现 本文主要介绍了基于 ARM9 的嵌入式 Linux 网络通信系统的设计与实现。该系统使用 $3C2410 微处理器和 Linux 操作系统,实现了服务器和客户端的网络通信。本文首先...
网络通信年终总结(完整版).doc
总结来说,实现P2P网络通信需要对网络编程、并发处理以及文件操作有深入的理解。通过Java的Socket编程,我们可以构建起基本的节点通信框架,再结合P2P网络的特点进行优化,从而实现高效、可靠的P2P网络通信系统。...
### VB环境下用Winsock实现网络通信 #### 概述 随着计算机技术和互联网的快速发展,网络编程已经成为现代软件开发中不可或缺的一部分。然而,由于涉及到复杂的网络专业知识和技术细节,很多编程爱好者和初学者往往...
总结,网络通信VC源代码是学习网络编程的良好起点,特别是对于想在Windows环境下使用C++进行网络开发的初学者。通过对源代码的分析和实践,不仅可以掌握TCP通信的基本原理,还能熟悉Winsock API的使用,为后续的网络...
总结起来,.NET网络通信涵盖了多种协议和模式,开发者可以根据需求选择合适的通信方式。无论是在桌面应用、Web应用还是移动应用中,理解和掌握这些技术对于构建高效、可靠的网络应用至关重要。通过学习和实践C#中的...
Linux 网络通信 socket 应用编程知识点总结含例程 Linux 网络通信 socket 应用编程是指在 Linux 操作系统中使用 socket 编程来实现网络通信的技术。socket 是一种网络编程接口,提供了一个创建网络套接字的方法,...
总结,基于socket的并发网络通信涉及到网络编程的基本原理、TCP连接的建立与维护、多线程/多进程并发处理以及可能的优化策略。理解并熟练掌握这些知识点,对于开发高效、可靠的网络应用程序至关重要。
PROFINET通信技术总结
本实验报告将详细阐述实验1及实验四至七的主要内容,旨在展示学生刘永富在网络通信程序设计上的实践成果。 1、引言 网络通信是计算机科学中的重要组成部分,它涉及到数据在网络中的传输和交换。实验旨在让学生们...
串口通信项目总结 本篇资源的主要内容是对多串口接收项目的总结,涵盖技术总结和心得总结两方面。下面将对标题、描述、标签和部分内容进行详细的解释和总结。 一、技术总结 技术总结是对整个项目的技术实现过程的...
201*年的计算机网络通信工作总结反映了该年度在IT管理岗位上的工作重点和挑战。在这一年中,工作者主要负责计算机硬件的管理、网络维护、电话系统的维护,以及协助各类会议和活动的顺利进行。以下是详细的知识点总结...
《VC网络通信编程实用案例精选第二版源代码Part1.rar》是针对VC++开发者的一份珍贵资源,包含多个章节的源代码示例,旨在帮助学习者深入理解和掌握网络通信编程技术。这份压缩包主要分为五个部分:chap1、chap2、...
总结来说,TCP网络通信结合多线程技术可以实现高效、稳定且具有高并发能力的服务器和客户端应用。在Linux环境下,借助socket API和高级库,开发者可以构建出强大的网络服务。同时,理解并掌握线程同步与锁机制、事件...