通信协议

在网上的信息交流是以数据的方式实现的,但到了我们的手机或者是电脑的客户端,就转换成了相应的文字图片信息或者其他内容,这个过程就需要协议来调节接受的顺序,以及方法,如果我们想要发送一个文件,就要把文件的内容以字节的形式发送过去,对于读取方而言,他如何知道过来的是一个文件而不是信息呢,这首先需要一个标记,就是发过来的是什么东西,另外,需要读出多少个字节,读到哪里算截止?就需要一个长度标记或者是结束标志。这两个加上文件内容构成了最基本的数据结构体,至于额外的比如人物信息,文件属性,时间地点等等就是一种数据类型,其基本都要经过这样的流程。所以我们要制定一个协议,发送方按照这样的协议发送,接收方按照这样的协议接收,这样才能保障接收到完整而又可读的信息,如果稍有失误,多读或少读一个字节,其后果都将是灾难性的。举一个最简单的例子,要发送一个文件,包括文件名,发送方的代码是这样的:
OutputStream out=Socket.getOutputStream();
DataOutputStream dat=new DataOutputStream(out);
File file=new File("你要发送的文件在你电脑上的地址");
FileInputStream fin=new FileInputStream(file);
int length=fin.available();
byte array[]=new byte[length];
fin.read(array);
byte[] filename=file.getname();
dat.write("你要发送文件的标记");
dat.writeByte(filename.length);
dat.write(filename);
dat.writeInt(length);
dat.write(array);
这样的,发送方就完成了对文件的发送
与此同时,接收方的代码是这样的:
InputStream ins=new InputStream();
if(ins.read=="你要发送文件的标记"){
DataInputStream din=new DataInputStream();
int length=din.readByte();
byte[] filename=new byte[length];
din.readFully(filaname);
length=din.readInt();
byte[]data=new byte[length];
din.readFully(data);
String name=new String(filename,"GBK");
}
这样就完成了数据的接受,具体想要把文件保存到哪个位置就请编写另行的方法实现
我们发现,发送和接收都是一一对应的,发送一个字节就读一个,发送四字节的整数就读出四字节保存成整数,发送多长的数组就创立多长的数组接收,这就是双方的协议,少了任何一行都会导致超量读取造成阻塞,或者过少读取造成丢失
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值