请教一下,大家开发网络协议是怎么做的?(三个问题)

skyMountain 2004-06-14 12:01:57
一、自定义网络协议,需要注意些什么问题?有什么原则?在哪里可以找到参考资料?

二、举例:UDP文件传输协议。我将文件平分为多份,每份2k字节,然后在每份前面都加上序号、长度和校验码,再一份份发送给对方,对方发现有缺失的或者校验码不正确的就命令重发。这样是否可行?有何改进的建议?

三、java中,大家是怎么解释数据包的?以前我使用C,直接将一个BUFFER转换成我自己定义的结构体就一切ok,但java中这样做不行吧?
...全文
477 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
YunTan 2004-06-23
  • 打赏
  • 举报
回复
1、这个问题太复杂了,没见过什么好的解决方案。以前试过用装饰者模式,后来发现是自找麻烦。
2、长度字段可以不用。每份2k字段可以,不过不妨设小些,由于UDP包本身有校验机制,校验字段也可省去。
3、别瞎忙了,java不允许直接操纵内存的。使用nio可以解决一些问题。不要用什么数据流,楼主估计是在写服务器程序吧,数据流效率很低的(一个字符一个字符读写,想想都觉得恶心)。
skyMountain 2004-06-18
  • 打赏
  • 举报
回复
有个朋友给我发个了NEW IO的示例,在此表示多谢了!
skyMountain 2004-06-16
  • 打赏
  • 举报
回复
再顶
to:bobfallen(逐流)
事情没那么简单,上面我的帖子都说过了,那个那么简单的UDP传输文件协议就存在那么多缺陷。怎样才能减少缺陷?
skyMountain 2004-06-15
  • 打赏
  • 举报
回复
多谢捧场,不过感觉都没说到点子上。
可能是我说的不够清楚吧,再解释一下:

1、所谓自定义协议,当然是在TCP或UDP的基础之上定义,基本的问题就是“怎样定义数据结构”。我想问的就是:定义数据结构的时候,需要注意那些问题?比方说,TCP/IP协议就由于开始的时候考虑不周,导致现在的地址空间不够用与及各种各样的安全性问题。我现在也要定义一个自己使用的协议,这个协议不算太复杂,但也有几十类数据包,我觉得有点乱,而且还不时发现一些小问题。可以肯定的是:像我现在这样随意制定的协议,一段时间之后肯定千疮百孔。要是有些前人总结出来的原则就好了。

2、没办法,我这里只能使用UDP。要是使用TCP还用得着定义多复杂的协议吗?上面那协议其实有不少问题,比方说,既然每份都定了是2K字节,那么有没有必要每个数据包都加一个长度字段?文件总共分为多少份,客户端怎么知道?每个数据包都生成校验码、检验校验码,是否太耗费资源?在UDP已经很可靠的今天,有没有必要每个包都加校验码?等等。

3、可能大家都没有C的经验吧。再举个例子,一个BUFFER,我知道它的第2、3字节是命令码,第4,5,6,7个字节合成是一个整数的MD5校验码。那么用怎样的方法才能快速、简洁把这两个信息提取出来?C语言中我一个语句可以搞定,JAVA中我却不知怎么办,只得将BUFFER转换成String再用SubString方法,其效率之低可想而知。

呵呵,第三个问题可能很菜,但第一第二个问题就很深了,没实际经验的人是回答不出来的。
Arias 2004-06-15
  • 打赏
  • 举报
回复
我觉得协议简单点解释就是传递数据双方对传递数据的认识问题!

我们的数据传递都是基于tcp或者udp的,只要在这基础上来定义自己的数据格式就是那!

具体的定义可以根据自己的需要来实现!

我也想学学!!
阎罗 2004-06-15
  • 打赏
  • 举报
回复
1》关于自定义网络协议的开发,首先你必须考虑协议的需求,因为各种不同的工作需要对协议的要求也会有不同的侧重点,所以你要了解你的协议最重要的你最需要的是哪部分。
2》至于协议的具体开发,你可以仿效tcp的三次握手机制,根据自己的需要设置不同的参数和命令,就像楼上兄弟说的那样基于tcp的协议比较好点,自己制定一个命令序列,规定每个命令的参数、返回的检验码,还有错误处理等等
3》在java里面你也可以用buffer来处理,至于具体怎么操作,网上资料很多,还要注意的是在传输过程中的字符处理,最好是用unicode,因为这样可以避免乱码的出现。
kingfish 2004-06-15
  • 打赏
  • 举报
回复
1.
可以在tcp或udp基础自己封装

2.
既然要校验+加序号之类,还是用tcp传好点.

3.
包格式可以自己定.
另外结构是没有的,但可以传object

skyMountain 2004-06-15
  • 打赏
  • 举报
回复
再顶
不信那么多java高手连这个小问题都搞不定!
阎罗 2004-06-15
  • 打赏
  • 举报
回复
就像Arias(永恒之道)说的一样,协议只不过是通信双方的一种互相遵守的约定,就像你说的规定每次传2k,你就可以在约定中写好,进行应答试交互,比如我要上传一个文件,客户端先向server端发送一个UPLOAD command,说明要进行上传,然后等待server端的回应,如果server端回应可以,再继续发送其他指令如,MODE,TYPE,SIZE,FILENAME等信息,通过C、S的不断握手来完成一次完整的工作,而并不要考虑我发送的文件大小server端知不知道。
skyMountain 2004-06-14
  • 打赏
  • 举报
回复
自己顶
看到一篇文章说道jdk1.4中介绍New Io类的,好像专门拿来建立自定义协议的,但介绍太简略了,不知怎么使用。
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧