网络模型OSI的网络模型分为七层应用层表示层会话层传输层网络层数据链路层物理层
Linux内核采用的网络模型应用层传输层网际层网络接口层
两台计算机的通信机制
两***立的计算机进行通信是需要借助于网络设备的同时计算机内部是怎么处理的呢?感觉我自己的认识概述如下一台计算机想要通信首先要找到目标机只要找到对象才有可能实现通信这就引出了IP的概念通信的计算机之间是通过IP地址来查找相应的目标计算机的IP地址分为两种IPV和IPVIPV是有四个字符数据组成IPV是有六个字符数据组成每个字符数据的最大值是两台计算机通过网线连接一起后在遵守TCP/IP协议的前提下通过IP地址进行通信每台计算机又有很多的应用程序如果一台计算机发送数据到另一个计算机上具体是哪一个应用程序接收呢?这个就需要有端口来区别计算机一共分配了——个数据用来表示端口每一个应用程序都有一个自己的端口也就是一个整数通过这个端口来决定传输数据的时候具体发送到那一个应用程序上所以说计算机想要通信首先要符合一定的协议然后有一个IP地址通过端口号来区分具体的应用程序来处理数据计算机传输数据时遵守的协议有很多常用的有两种TCP和UDP TCP协议特点<>在传输数据前需要建立连接通过三次握手完成tcp通信是面向连接的
<>数据在传输过程中不需要大包操作可以传输大量的数据
<>由于是在建立连接的基础上进行数据的传输该协议比较可靠
<>想传数据必须建立连接在速度和效率上稍低
UDP协议的特点<>UDP是面向无连接的双方进行通信不需要建立连接
<>数据在传输过程中要进行打包操作每个包的最大为K字节
<>面向无连接的传输该协议不可靠
<>不需要建立连接传输速度快效率高
Java中网络编程类java中用来网络编程的包是UDP协议通信使用的是java包中的DatagramSocket和DatagramPacket对象建立通信机制的步骤是<>通过DatagramSocket对象是为网络通信构建一个通道专业的叫法就是创建端口
发送端具体实现代码DatagramSocket ds = new DatagramSocket()如果是发送端的话这个端口可以不进行绑定使用内核自由分配的端口号即可如果是接受端的话这个端口要必须要绑定到特定的端口这个端口也可以叫做监视器监视某个端口信息的变化接收端具体实现代码DatagramSocket ds = new DatagramSocket(端口号) 参看GDK手册有详细说明
<>封包操作
如果是发送端的话首先要有数据由于网络传输的都是二进制数据所以在定义网络包的时候也要定义成二进制形式的具体定义代码如下发送数据包数据byte[] buf = 数据getBytes()接受数据包数据byte[] buf = new byte[]有了数据和数据缓沖区后可以把这个数据和数据缓沖区封装成网络包发送端的数据包DatagramPacket dp = new DatagramPacket(bufbuflengthInetAddressgetAddress())接受端的数据包DatagramPacket dp = new DatagramPacket(bufbuflength)<>发送接受操作
根据端口Socket的方法对数据包发送和接受操作具体实现代码发送端dssend(dp)接收端dsreceive(dp) 接收到的数据包放到接收端定义的数据包缓沖区中
<>关闭资源
dsclose()TCP协议通信使用的是java包中的Socket和ServerSocket对象TCP和UDP的区别在于TCP是建立连接UDP是不需要连接TCP操作的是端口输入输出流对象UDP操作的是DatagramPacket包按照TCP通信时不需要建立包直接获取输入输出流操作即可通信机制的步骤如下<>TCP通信首先也是要建立Socket端口UDP中客户端和服务端都是使用的DatagramSocket创建对象的方法创建通信端口TCP建立端口时客户端和服务端是使用不一样的类具体操作代码如下客户端Socket s = new Socket()服务端ServerSocket ss = new ServerSocket(监听端口)<>建立连接操作
通过服务端ServerSocket对象的accept方法获得端口连接在获得请求端口信息后建立连接
<>获得输入输出流操作
在客户端获得Socket的getOutputStream()方法通过该方法输出数据在服务端通过获得Socket的getInputStream()方法读取数据
<>关闭流操作
客户端sclose()服务端sclose ssclose()网络编程的实例附录UdpTransjava <使用UDP协议进行简单的通信实验> TcpDemojava <使用TCP协议进行简单的通信实验> UdpdownTextjava <使用UDP协议上传文本文件> UdpdownPicjava <使用UDP协议上传图片>