标签:stat send shutdown 文件 localhost end tcp 提前 发送数据包
JAVA20
l 计算机网络中的各个电脑可以互传数据
l 传输数据有一定的规则 就是网络协议
l 对数据的传输格式 速率 步骤都有规定
l 必须遵循规则才能传输数据
l 有很多种,最广泛的是TCP/IP和UDP
l 主要学习TCP/IP
l 应用层
应用程序的协议
l 传输层
使网络程序进行通信 UDP和TCP
l 网络层
TCP/IP核心层
l 链路层
光纤,网线驱动协议
l IP地址
127.0.0.1 代表本机地址
l 端口号
l 表示互联网中的IP地址
l Java.net.InetAddress
l 不可以实例化对象
l 静态方法获取
l 其他静态方法
l 获取非本机的ip对象
l 是传输层两个重要的高级协议之一
l 无连接通信协议
l 数据传输的两端不建立逻辑连接
l 发送端不会确认接收端是否存在 接收端也不会反馈是否收到数据
l 消耗资源小 通信效率高 常用于音频视频 普通数据的传输
l 例如视频会议 空间留言
l 即使丢失一两个数据包 也不会对接收结果产生太大影响
l 比如电脑视频同步只是会卡一点而已 并不会有太大影响
l 数据大小在64kb内
l 面向连接的是通信协议
l 提供了两台计算机之间可靠无差错的数据传输
l 必须明确客户端和服务端
l 每次连接需要“三次握手”
l 客户端发出连接请求 服务端反馈允许连接 客户端反馈连接成功
l 连接速度慢但是安全性高
l 被广泛采用
l 下载文件必须使用TCP
l 两台计算机
l
l 两台计算机
l 一台发送一台接收
l 发送端需要知道接收方法ip和端口号
l 数据需要包装才能发送
l 包装数据 相当于码头的集装箱
l 封装数据 接收端的地址和端口
l 接收数据 绑定端口号和发送端一致
l 将包装好的数据发送/接收 相当于码头的作用
l 发送端创建DatagramPacket的对象 包装数据和设置接收端的地址和端口
l 发送端创建DatagramSocker的对象 发送数据包
l 发送端关闭资源 发送对象DatagramSocker
l 示例
l 接收端创建DatagramPacket的对象 绑定端口号
l 接收端创建字节数组加收发送来的数据
l 接收端创建DatagramSocker的对象 传入数组和数组长度
l 调用receive方法接收数据 传入参数 DatagramPacket的对象
l 拆包
发送的IP地址
接收的字节个数
发送方的端口号
l 关闭资源
l 示例
运行后没有结束 因为receive具有线程等待 会检测udp的发送 如果不发送数据就会一直在检测
拆包
但是数组长度太大造成浪费
所以调用DatagramPacket的getlength方法返回接收的数据长度
拆包IP地址
调用DatagramPacket的getAddress 获取到发送端的IP对象
通过这个对象就能得到IP地址和主机名
拆包发送端端口号
调用datagramPacket的方法getport
l 有明确的客户端和服务器
l 服务端类 ServerSocket
l 客户端类 Scoket
l 客户端主动连接服务器
l 服务器提前启动等到客户端连接
l 客户端请求服务器
l 服务器同意连接
l 客户端和服务端形成一个通路 有一个对象就建立完毕了
l 这个对象就是IO流对象 字节流
l 可以进行数据交换
l 客户端输出 服务端输入 服务端输出 客户端输入
l 此类实现了客户端的套接字 套接字就是两台机器通信的端点
l Java.net.Socket
l 构造方法
将数据输出,输出到服务器
将数据输入,从服务端读取数据
l 此类实现了服务器端的套接字
l 构造方法
ServerScoket(int port)传递客户端要求的端口号
l 服务器需要知道谁连接上了服务器 因此需要获得服务器的套接字对象
l 获取方法
accept()返回客户端的套接字对象
l 示例
l 客户端
l 服务端
l 读网络流中的字节数组读不到-1
l 如果循环读取就会死循环
l 这是用到这个方法
l 禁用此套接字的输出流
l 如果调用了此方法就会抛出异常
l Read遇到抛出异常就会返回-1
l 循环就停了下来
标签:stat send shutdown 文件 localhost end tcp 提前 发送数据包
原文地址:http://www.cnblogs.com/DMYMaster/p/7353383.html