如何做网络通信的项目?

http://blog.csdn.net/clarkcc1988/article/details/8825106


JAVA TCP  ,SOCKET,MINA




什么是Socket


网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。


但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。
 




短连接是一个简单而有效的处理方式,也是应用最广的。问题是哪一方先断
开连接呢?可以在服务端,也可以在客户端,但是提倡在服务端主动断开;








总结:
服务端程序或客户端程序创建过程:
创建连接---??添加消息过滤器(编码解码等)——>添加业务处理




Mina 处于中间层,它不关心底层网络数据如何传输,只负责接收底层数据,
过滤并转换为Java 对象提供给我们的应用程序,然后把应用程序响应值过滤并
转换为底层识别的字节,提供给底层传输;
------总之:Mina 是底层数据传输和用户应用程序交互的接口!






关于远程通信。。。


一个完整的,大型的软件项目往往需要几个厂商分模块来完成。
厂商之间如何通信?需要定制通信通道。一般由硬件厂商来制定相关通道。
(软件厂商需要听从硬件厂商)


例如:
这次我们做的是telematics项目,我们公司负责做一个网关模块,硬件厂商是车厂,车机上报的指令通过三种通道来请求。
他们分别是:SMS,HTTP,TCP。(具体的,细节的传输机制在这里不说)


厂商之间的通信需要协议协议,之后各个厂商之间按照事先定制好的协议进行通信。


关于协议制定:
在开发之前,各个厂商需要开会指定一套协议方案,也就是如何编解码。
为什么要制定协议呢?常用的协议制定方法有哪些?
我们知道,底层传输的都是二进制数据,服务端和客户端建立连接后进行数据的交互,
接受这对方发送来的消息,如何判定发送的请求或者响应的数据结束了呢?
总不能一直傻等着,或者随意的就结束消息接收吧。这就需要一个规则!
比如QQ 聊天工具,当输入完一个消息后,点击发送按钮向对方发送时,此时系
统就会在在你的消息后添加一个文本换行符,接收方看到这个文本换行符就认为
这是一个完整的消息,解析成字符串显示出来。而这个规则,就称之为协议!


制定协议的方法:
1:定长消息法:这种方式是使用长度固定的数据发送,一般适用于指令发
送。譬如:数据发送端规定发送的数据都是双字节,AA 表示启动、BB 表
示关闭等等。


2:字符定界法:这种方式是使用特殊字符作为数据的结束符,一般适用于
简单数据的发送。譬如:在消息的结尾自动加上文本换行符(Windows
使用\r\n,Linux 使用\n),接收方见到文本换行符就认为是一个完整的
消息,结束接收数据开始解析。注意:这个标识结束的特殊字符一定要
简单,常常使用ASCII 码中的特殊字符来标识。


3:定长报文头法:使用定长报文头,在报文头的某个域指明报文长度。该
方法最灵活,使用最广。譬如:协议为– 协议编号(1 字节)+数据长
度(4 个字节)+真实数据。请求到达后,解析协议编号和数据长度,根
据数据长度来判断后面的真实数据是否接收完整。HTTP 协议的消息报
头中的Content-Length 也是表示消息正文的长度,这样数据的接收端
就知道到底读到多长的字节数就不用再读取数据了。


根据协议,
把二进制数据转换成Java 对象称为解码(也叫做拆包);
把Java对象转换为二进制数据称为编码(也叫做打包);
我们这里重点讲解下后面两个协议的具体使用!




作者:李少华
邮箱:xiaosanshaoli@126.com
QQ:305409913






关于编解码:
网络传输的数据都是二进制数据,而我们的程序(JAVA)不可能直接去操作二进制数据;
这时候我们就需要来把接收到的字节数组转换为字符串,当然完全可以转换为任何一个java基本数据类型或对象,
这就是解码!而编码恰好相反,就是把要传输的字符串转换为字节!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值