`
东之雪
  • 浏览: 1282 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

通信协议的概念与传送文件的举例

阅读更多
[color=blue]
通信协议概念——文件传送;
   我们的客户端在与服务器端在交流的过程中就拿QQ来举例吧~可以聊天~可以互相传送各种文件~我们还要添加或删除好友~注册什么什么~获取好友列表~进入空间等等一大堆的事情~可是我们的输入流和输出流总是一大堆的字节~我们要准确的来设置和处理我们要发布的和接收的信息我们就必须事先准备好和服务器之间的协议~
拿发送消息和发送文件来说吧~
我们可以事先给消息一个标记位~比如消息是0x0,文件的是0x1;这样我们在接受的 时候可以通过先读取标记位就可以明白是消息还是文件了~紧接着我们可以继续定义其他的一些事情~
如果是消息~我们得把这个消息的字符长度告诉对方~紧接着就是消息内容~如果是文件我们得知道文件名和文件内容~所以我们可以定义文件名长度,文件名,文件长度,文件内容~这样按照一定的顺序和组织发出去的字节流我们就可以按照这个规则来读取~就更明了了~当然啦~这个只是举个例子~我们还可以分的再细一些~比如发送的时间~是发给谁的~怎么怎么样都行~~
下面的代码就是按照这个协议写的内容了举例了~


先建立一个客户端~我们先在客户端来按照这个协议来发送信息[/color]Socket socket = new Socket(string, port);
FileInputStream fis=new FileInputStream(filename);
int length=fis.available();///返回该文件下的字符总长度
byte[] bytes=new byte[length];
int  readLen = fis.read(bytes);///一次性全部读完~~于是这个字节数组就有东西了
System.out.println("readLen="+readLen);
// String s=new String(bytes);//转成字符串再输出~~
// System.out.println(s);

fis.close();//文件操作结束后应该关闭掉它~~

OutputStream out=socket.getOutputStream();
DataOutputStream dos=new DataOutputStream(out);
int size=filename.getBytes().length;//文件名的长度
dos.writeInt(size);
System.out.println("文件名长度"+size);
dos.writeInt(length);///文件的长度
System.out.println("文件长度"+length);
dos.write(filename.getBytes());

dos.write(bytes);
dos.flush();
dos.close();

再在服务器端按照这个协议解析这个信息~~
S是服务器端得到的Socket对象

InputStream input = s.getInputStream();
output = s.getOutputStream();
DataInputStream dis=new DataInputStream(input);
int size=dis.readInt();///文件名长度
System.out.println("文件名长度"+size);
int size1=dis.readInt();//文件长度
System.out.println("文件长度"+size1);
byte[] bytes=new byte[size];
dis.readFully(bytes);

String filename=new String(bytes);
System.out.println("文件名是:"+filename);

byte[] b=new byte[size1];
dis.readFully(b);
最后生成一个文件保存起来~~并关闭所有的流~~~
File f=new File("E:/AXWWWWWWWAXA.exe");
f.createNewFile();
FileOutputStream fos=new FileOutputStream(f.getAbsolutePath(),true);
fos.write(b);
fos.flush();
dis.close();
fos.close();
总结:
俗话说无规矩不成方圆~我们只要事先制定好了规矩~就不怕一大堆的信息交汇了~我们就可以大胆的去写通信类的产品了~而且在数据库的设计和增删改查过程中也简便多~也有所启发~是不是有种豁然开朗的感觉哈?~
分享到:
评论

相关推荐

    Visual C++实践与提高——串口通信与工程应用篇1

    2.5.9 实际传输文件截图 45 2.6 程序发布问题 45 2.7 小结 45 第3章 使用WinAPI串口编程 47 3.1 API串口编程概述 47 3.2 采用同步查询方式的编程方法 47 3.2.1 创建串口 48 3.2.2 关闭串口 53 3.2.3 发送数据 53 ...

    数据通信原理与技术

    51.1通信协议的一般概念……. 5.1.2通信协议的分层…………. 5.2物理层协议…………………. 5.2.1 基本概念…………………. 5.2.2 CCrR v.N/搬232c建议 ‘ 5.2.3 v 35建议………………. ...

    多媒体技术及应用 — 课程学习

     16.6 实时传输协议和实时控制协议  16.7 资源保留协议  练习与思考题  参考文献和站点 第17章 多媒体通信系统技术  17.1多媒体通信系统概要  17.2 H.323电视会议  17.3 H.324可视电话  17.4 IP电话  ...

    java自学之道

    1.2 TCP传输控制协议 1.3 UDP用户数据包协议 2、URL连接 2.1 URL 2.2 Java.net包中URL类定义 2.3 创建URL对象 2.4 Java.net包中URLConnection类 2.5 AppletContext接口类 2.6 获取网络属性信息 2.7 创建输入流...

    UNIX操作系统教程 张红光

    第1章绪论.1 1.1操作系统概述1 1.1.1建立操作系统的目标1 1.1.2操作系统是用户与计算机的接口1 1.1.3操作系统是资源管理器2 1.2UNIX系统的主要特性3 1.3UNIX系统的发展史4 1.4开源软件与UNIX的推广发展6 1.4.1开源...

    计算机网络&计算机网络

    15.2 TFTP:简单文件传输协议 15.3 NFS:网络文件系统 15.4 小结 习题 第16章 电子邮件 16.1 电子邮件系统体系结构 16.1.1 ISO/OSI电子邮件系统 16.1.2 TCP/IP电子邮件系统 16.2 TCP/IP电子邮件地址 16.3 ...

    计算机网络(汲及内容全面)

    15.2 TFTP:简单文件传输协议 15.3 NFS:网络文件系统 15.4 小结 习题 第16章 电子邮件 16.1 电子邮件系统体系结构 16.1.1 ISO/OSI电子邮件系统 16.1.2 TCP/IP电子邮件系统 16.2 TCP/IP电子邮件地址 16.3 ...

    计算机网络基础知识

    15.2 TFTP:简单文件传输协议 15.3 NFS:网络文件系统 15.4 小结 习题 第16章 电子邮件 16.1 电子邮件系统体系结构 16.1.1 ISO/OSI电子邮件系统 16.1.2 TCP/IP电子邮件系统 16.2 TCP/IP电子邮件地址 16.3 ...

    经典全面系统的网络工程师资料

    15.2 TFTP:简单文件传输协议 15.3 NFS:网络文件系统 15.4 小结 习题 第16章 电子邮件 16.1 电子邮件系统体系结构 16.1.1 ISO/OSI电子邮件系统 16.1.2 TCP/IP电子邮件系统 16.2 TCP/IP电子邮件地址 16.3 ...

    linux programming instances网络编程教程 附源代码

    全书由13章组成,内容涉及到Lindx系统编程基础、TCP/UDP协议、套接字编程概念及I/O模型、高级编程中需要用到的进程问通信同步、多路复用、多线程编程和一些高级套接字控制方法、IPv6介绍以及网络安全等。...

    入门学习Linux常用必会60个命令实例详解doc/txt

    文件为doc版,可自行转成txt,在手机上看挺好的。 本资源来自网络,如有纰漏还请告知,如觉得还不错,请留言告知后来人,谢谢!!!!! 入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供...

Global site tag (gtag.js) - Google Analytics