您的位置:软件 > 开发者网络 > 开发工具 > Java > 正文
用Java的New IO开发网络协议
[文章信息]
作者:jinhuaxing
时间:2004-05-27
出处:论坛
责任编辑:方舟
[文章导读]
网络协议基本的通讯单位是一个一个的消息包。在用socket传输这些包的时,首先要解决的一个问题是如何解决包与包之间的边界问题
advertisement
热点推荐
· 天极网软件频道改版调查
· 25软件精选 Excel分页汇总
· 提升Win XP性能的20个特殊技巧
· 图解JBuilderX安装与实践
· Fireworks国画:葡萄小鸡图
[正文]

1 2  下一页

  最近用Java的New IO开发了一套简单的网络协议,在这里我把开发中的一些心得整理一下,总结出一套简单的可以重用的网络协议开发框架,希望能够给初学者一点帮助。

  网络协议基本的通讯单位是一个一个的消息包。在用socket传输这些包的时,首先要解决的一个问题是如何解决包与包之间的边界问题。socket传输的是流,一个send中发出的消息,在对方不一定在一个recv中收到,可能要多次recv,或者一个recv收到多个send中放出的包。所以必须由应用层协议自己来解决包的定界问题。通常有两种方法,一种是每个包以一个特殊的字符或者字符串来结束,如http协议就是以两个'\n'作为一个消息的结束标记;另一种方法就是,所有的消息都有一个固定长度的消息头,在消息头中指出这条消息的长度。我们的协议是采用第二种方法,这也是大部分协议采用的方法。本文提出的框架也是解决这种协议方式的。

  Java的New IO是在J2SE1.4引入的,主要引入了Buffer这样的概念,发送接受数据都是在Buffer上进行,而对于初学者,Buffer的操作是比较复杂的,容易出错。所以在这个框架中尽可能的把对于Buffer的操作封装起来。

  框架主要有MessageHeader, Message, MessageFactory三个接口,两个类MessageChannel, BufferUtil,以及一个异常类MessageFormatException构成。下面说明这几个接口和类的功能。

  1. MessageHeader接口

  在这样一套网络协议中,总是有一个固定长度的消息头,不同的协议有不同的消息头,但是几乎所有的消息头都定义了本消息的长度和本消息的类型。类型用于识别不同的消息包。类型相同的包,格式都是一样的,可以用同一个Java的class来表达。类型不同的包,格式可能相同也可能不同,依赖于协议。接口定义如下:

public interface MessageHeader {
/**
* 返回消息类型
*/
int getMessageType();

/**
* 返回消息长度
*/
int getMessageLength();

/**
* 从Buffer中提取消息头
*/
void buildFromBuffer(ByteBuffer buffer);

/**
* 把消息头放到Buffer中
*/
void appendToBuffer(ByteBuffer buffer);

}

  2. Message接口

  Message代表一个消息包。每个消息包有一个消息头。其定义如下:

public interface Message {
/**
* 设置消息头,在MessageChannel.receive中调用
*/
void setHeader(MessageHeader header);

/**
* 返回消息头
*/
MessageHeader getHeader();

/**
* 从Buffer中取出消息体
*/
void buildBodyFromBuffer(ByteBuffer buffer);

/**
* 把消息体放到Buffer中
*/
void appendBodyToBuffer(ByteBuffer buffer);
}


1 2  下一页

·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载


发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 用Java Swing制作欢迎屏幕
  • 如何更好的使用JTextPane
  • Java+Oracle应用开发的几个问题
  • 基于Swing的图书馆系统XML框架
  • EJB数据验证出现在什么地方最合适
  • 盘符混乱咋办 拨乱反正有巧招
  • MotherBoard Monitor入门篇
  • MotherBoard Monitor进阶篇
  • 如何买到一部称心的品牌电脑
  • 关注!国内首款GeForce 6200显卡曝光
  • 《魔兽世界》角色扮演游戏壁纸
  • 天极缉拿假IE4.0为首的仿冒鼠
  • 《魔兽世界》Q版人物头像集
  • Advertisement

    天极无线
    待机彩图    >>更多
    多彩动画    >>更多
    美妙和弦    >>更多
    天使在唱歌
    壁虎漫步
    PrettyBoy
    LoveLoveLove
    我是你的小小狗
    单身情歌
    十面埋伏
    祝酒歌
    回心转意
    波斯猫
    太委屈
    S.H.E
    潘玮柏
    M2M
    蔡依林
    阿牛
    林志炫
    陈弈迅
    刀郎
    黑龙
    S.H.E
    陶晶莹
    情人玫瑰坊
    音乐风云
    新片速递
    神秘测试
    都市约会
    ·天极彩信天天精彩
    ·图铃梦工厂下载无限!
    ·找寻童真,卡通专题
    ·夏日激情交友社区!
    ·星座运程,预测人生

    CSEEK搜索