`
bigfang
  • 浏览: 40237 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

通信3总结——简单的XML格式

阅读更多

    刚觉得,通信的传输内容很简单,就是由位(0、1二进制)组成的字节。但是,通过设计之后,产生了多种协议。

    此次使用了XML 格式定义消息,如<msg>消息内容……</msg>,替代了前面无标志的消息,更具有灵活性。将此字符串转化为字节写入流里。
    与字节流相比,XML 格式的消息清晰,明了易懂,但标签加大了消息的长度。

1.代码严谨性。
  1.1考虑函数的输入和输出。
      1.1.1检查传入的参数是否合格;
      1.1.2当调用函数的时候,对不同返回值的处理。比如返回值null。
  1.2输入框内是否允许输入为空(String=””)。字符串””和null的区别。
  1.3 try{}中放入的语句,捕获到异常,{}内后面的语句就不执行了。
总之,考虑可能产生的多种情况,并做相应的处理。

2.函数的定义
    函数的功能具有普遍性,则可调用的地方多。比如发消息的函数和只能发送特定消息的函数。
    函数的功能增多时,这个函数调用的次数就少了。正如越简单的零件,处处需要它,使用率越高。

3易犯错误
    由于写在不同的函数中,只需写一次的代码,写了多次。如Socket的关闭,由于随意调用,就使用了多次。先前已创建了对象,后面,又重新创建了这个对象。没理清思路。

4. 服务器和客户端都有Socket对象:
     服务器:java.net.Socket so=server.accept();
    客户端:so=new java.net.Socket(ip,port);
但同一个Socket得到的输入流不会读取自己的输出流传送的数据。

5.类与类之间的关系
    类与类之间属性的传值:一种可以通过方法(set、get、构造函数)。另一种,通过对象直接调用类的非private属性。
  易产生方法栈溢出的情况:
    B的构造方法中,创建A;且A的构造方法中,创建B。则创建A(或B)的对象时,互相调用。
public class A {
	public static void main(String[] args) {
		A a=new A();
	}
	
	public A(){
		B b=new B();
	}
}
public class B {
	public B(){
		A a=new A();
	}
}
      而传值,对于基本类型,再拷贝一份;非基本类型,由于占的内存较大,所以只是传引用,不会造成互相调用的后果,最多,创建了多份不需要的引用。

6.在阻塞处捕获异常,处理断开连接的情况。
    如6.1客户端,在接收服务器消息处阻塞。突然断线,客户端read处捕获异常,处理:关闭客户端,提示用户:已与服务器断开连接。

    6.2服务器,在接收客户端消息处阻塞。突然断线,服务器readString()中read字节捕获异常,处理:关闭与此客户端的Socket连接对象,提示其他用户:此用户已下线。服务器断开,在服务器accept处,处理异常。

7.类的属性加注释,说明作用。否则如果属性很多,以后看就想不起属性的作用了。

8.在处理单独聊天,弹出单独聊天界面时,遇到一些问题:
   8.1 发送方a请求前,对方b已经将两者的单聊界面打开。
   8.2双方聊天中,突然一方a下线,对方b的单聊界面未关闭;等到a上线时,对方b的单聊界面可继续和a聊天。
   8.3一方a打开了与b、c的多个单聊界面,此时,要管理多个a的单聊界面,并将b、c发送的消息添加到a对应的聊天界面。
    一开始,有些混乱,但理清思路,考虑如何传值后,就有进展了。当一个类的对象很多时,就要进行管理。目前,只用了ArrayList和Map,如果存在一一对应的关系,就使用Map。使用Java中已有类的方法,与自己写相比较,能减少代码,看起来清晰。

   9.XML格式的消息,由于是字符形式,传文件比较麻烦。
<msg>
   <type>file</type>
   <na>文件名</na>
   <con>文件内容</con>
</msg>
1.先传前半段字符串<msg><type>file</type><na>文件名</na><con>
2.再直接传文件字节
3.再传后半段字符串</na><con>
分享到:
评论

相关推荐

    Java远程通信技术——Axis实战.doc

    【Java远程通信技术——Axis实战】 在互联网时代,网络通信技术是软件开发不可或缺的一部分。TCP/IP和UDP/IP作为底层传输协议,承载了大部分网络数据,而HTTP协议则在此基础上提供了超文本传输。Java中,有多种远程...

    protobuf-js-3.17.0

    Protocol Buffers(简称protobuf)是Google推出的一种数据序列化协议,它允许结构化数据串行化,可用于数据存储、通信协议等方面,类似于XML、JSON,但更加小巧高效。 protobuf的核心在于定义一种结构化的数据格式...

    TwinCAT3和第三方伺服电机——汇川电机使用

    总结来说,TwinCAT3与汇川电机的集成,借助于高效的通信协议和强大的编程环境,能够实现高效、精确的运动控制,是现代工业自动化领域的理想选择。通过深入理解TwinCAT3的功能和汇川电机的特性,工程师可以充分发挥...

    flash通过xml与asp.net通信

    总结起来,这个技术方案通过XML作为数据交换格式,实现了Flash与ASP.NET之间的数据通信,这对于构建富媒体Web应用非常有用,比如动态图表、游戏或者交互式内容。在实际应用中,需要考虑性能优化、安全性以及用户体验...

    XML快速入门教程——韦斯利著

    - **通信**:基于XML的格式,支持多种网络协议(如HTTP、SMTP等)。 - **优点**:跨平台、跨语言的互操作性。 ### 总结 本书《XML快速入门教程》由IT领域著名专家韦斯利撰写,旨在为学习XML的新手提供全面的指导。...

    XML简单实例 XML简单实例

    本实例将通过四个文件——saveit.dtd、saveit.xml、saveit.xslt和SPY,来展示XML的基本用法和工作流程。 首先,我们来看`saveit.dtd`文件,这是一个文档类型定义(DTD)。DTD是用来定义XML文档结构的规则集,它规定...

    C# 开发人员指南——ASP.NET、XML、web服务与 ADO.NET

    ASMX提供了一种简单的方式快速搭建Web服务,而WCF更为强大,支持多种通信协议和数据格式。开发Web服务时,理解SOAP(简单对象访问协议)和REST(表述性状态转移)的区别也很重要,SOAP通常用于企业级应用,而REST更...

    安卓Android源码——串口通信(JNI)例子.zip

    总结来说,这个压缩包提供了Android应用使用JNI进行串口通信的一个实例,可以帮助开发者学习如何在Android平台上结合Java和原生代码来实现硬件交互。通过阅读提供的资源,开发者可以了解如何配置和管理串口,以及...

    Flex的通信方式(三)——HTTPService_1

    在Flex应用中,HTTPService常用于获取或提交数据,例如从服务器检索JSON或XML格式的数据,或者提交表单数据到后端服务。 首先,我们需要了解HTTPService的基本使用。在MXML中,你可以创建一个HTTPService实例,并...

    J2EE——Ajax——dwr——配置文件

    在J2Direct Web Remoting (DWR) 是一个强大的开源库,它使得在J2EE应用程序中实现Ajax(Asynchronous JavaScript and XML)功能变得更加简单。Ajax允许Web应用程序在不刷新整个页面的情况下与服务器进行异步通信,极...

    ASP.NET源码——蓝驿轨迹ajax+xml实现省市区无刷新联动源码.zip

    在这个特定的源码包“ASP.NET源码——蓝驿轨迹ajax+xml实现省市区无刷新联动源码.zip”中,我们关注的是如何使用Ajax(Asynchronous JavaScript and XML)技术和XML来实现省市区选择的无刷新联动功能。这种功能常见...

    Android网络下的XML解析和生成.

    在Android开发中,XML(eXtensible Markup Language)是一种常用的数据交换格式,尤其是在网络通信中。本章节将深入探讨Android环境下如何进行XML的解析和生成,这对于理解数据交互、API调用以及本地数据存储至关...

    智能家居客户端实现——Android Studio版.zip

    总结来说,"智能家居客户端实现——Android Studio版"是一个集成了Android开发、网络通信、设备控制和用户体验设计等多个领域的项目,对于想要涉足智能家居领域的开发者来说,是一个很好的学习和实践平台。...

    Android源码——简单通讯源码:手机控制PC的关机、重启、.zip

    总结来说,这个项目涉及到Android应用开发的多个方面,包括UI设计、网络通信、服务组件和权限管理,同时还需要考虑安全性、用户体验和错误处理。通过学习和实践这样的源码,开发者可以提升自己在Android远程控制和...

    android的xml文件的解析

    总结,XML解析是Android开发中的基础技能,了解并掌握DOM和SAX解析方式可以帮助开发者更有效地处理XML文件。选择合适的解析方式取决于具体的应用场景和性能需求。在实际项目中,还有一种基于SAX的拉式解析库——PULL...

    Ajax学习——DWR的参考书和实用案例学习总结

    **Ajax学习——DWR的参考书和实用案例学习总结** DWR(Direct Web Remoting)是一种优秀的开源框架,专门用于简化Web应用程序中的Ajax(Asynchronous JavaScript and XML)开发。Ajax技术允许网页在不刷新整个页面...

    JXTA——Java P2P网络编程技术

    3. **XML基础**:JXTA使用XML作为其数据交换格式,这使得不同平台和语言之间的互操作性成为可能,同时也方便了消息的解析和生成。 **二、JXTA的主要特性** 1. **对等身份(Peer Identity)**:每个JXTA节点都有一...

    Ajax征服——留言本

    总结来说,“Ajax征服——留言本”是Ajax技术在实际应用中的一个经典示例,通过它,我们可以学习到如何利用Ajax实现实时、无刷新的数据交互,提高Web应用的用户体验。这个实例不仅涵盖了Ajax的基本用法,还涉及到...

Global site tag (gtag.js) - Google Analytics