社区
Java SE
帖子详情
请教一下,大家开发网络协议是怎么做的?(三个问题)
skyMountain
2004-06-14 12:01:57
一、自定义网络协议,需要注意些什么问题?有什么原则?在哪里可以找到参考资料?
二、举例:UDP文件传输协议。我将文件平分为多份,每份2k字节,然后在每份前面都加上序号、长度和校验码,再一份份发送给对方,对方发现有缺失的或者校验码不正确的就命令重发。这样是否可行?有何改进的建议?
三、java中,大家是怎么解释数据包的?以前我使用C,直接将一个BUFFER转换成我自己定义的结构体就一切ok,但java中这样做不行吧?
...全文
477
10
打赏
收藏
请教一下,大家开发网络协议是怎么做的?(三个问题)
一、自定义网络协议,需要注意些什么问题?有什么原则?在哪里可以找到参考资料? 二、举例:UDP文件传输协议。我将文件平分为多份,每份2k字节,然后在每份前面都加上序号、长度和校验码,再一份份发送给对方,对方发现有缺失的或者校验码不正确的就命令重发。这样是否可行?有何改进的建议? 三、java中,大家是怎么解释数据包的?以前我使用C,直接将一个BUFFER转换成我自己定义的结构体就一切ok,但java中这样做不行吧?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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类的,好像专门拿来建立自定义协议的,但介绍太简略了,不知怎么使用。
微信小程序系统教程C#版[3/3阶段]_微信小程序电商系统
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序
开发
的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术
问题
可以
请教
老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序
开发
的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序
开发
宝典》。 购课请咨询qq2326321088
python qq协议_SmartQQ协议分析以及Python
开发
:登录部分
这两天一个小学弟向我
请教
QQ机器人是怎么
开发
的,想想自己也有近两年没研究过WebQQ的协议,突然兴起研究
一下
,其实吧,现在已经不存在所谓的WebQQ了,取而代之的是SmartQQ,其实说白了就是不需要账号密码登录,而是通过手机扫码的方式吧。大概经过
三个
夜晚的研究和
开发
,现在我的Python版本的SmartQQ已经接近
开发
尾声,所以写一篇文章记录下整个分析的过程。上面????的git地址包含本次项目所有的...
阿里巴巴Java
开发
工作者每天在
做
什么?
阿里巴巴[Java
开发
工作者每天在
做
什么?有些小伙伴只知道Java行业就业薪资比较高,但是Java工程师具体每天都干什么?工作内容是什么,是很多小伙伴不是很清楚的,下面小编汇总了
一下
阿里巴巴的Java
开发
工作者的工作内容 作为一名阿里巴巴普通java
开发
工作者,从工作模块和职责的角度,给大家分享
一下
我的具体工作范围,从个人经验角度也给出一点对新人的建议。 在阿里巴巴,像我这样的一个普通java
开发
工作者的工作时间普遍是早上9点到晚上8点。 具体工作内容可以分为
开发
,运维,答疑,每一项工作的时间占比对于不同岗
计算机网络实验四协议分析心得,计算机网络学习心得体会范文
计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。下面是学习啦带来的计算机网络学习心得体会范文,欢迎查看。计算机网络学习心得体会范文一:通过为期一个学期的选修课程的学习,作为一个涉及计算机网络不深的我来说收益匪浅。那么以下就是在此次学习过程中我所总结出来的关于计算...
想要高薪还想要低要求?想转行
做
Python自动化测试,我需要怎么
做
?
最近小编连续收到好几个粉丝的私信询问:我年纪上来了,原来的行业
做
不下去了,想转行还能行吗?我是女生,计算机专业快毕业了,但是不喜欢
做
开发
怎么办?我对编程行业感兴趣,想学编程,但是感觉
做
开发
难度高怎么办?我想要高薪,但是感觉
做
开发
工作好难……在此,小编给大家一些建议,可以根据自身能力和兴趣参考
一下
。
Java SE
62,615
社区成员
307,307
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章