网络编程(UDP TCP)

网络编程

1. 网络编程概述
1.1 C/S和B/S

C/S 
	客户端 服务器软件结构
	服务提供商给予用户服务需要准备的内容
		1. 各大平台的客户端
			Android iOS PC Windows Linux macOS
			QQ 微信 淘宝 JD 剑与远征
		2. 服务器提供服务
	软件更新:
		LOL服务器版本更新,同时本地软件也要进行更新操作。这个操作非常耗时。
		热更新
		
B/S
	浏览器 服务器软件结构
	服务提供商只要提供数据服务就OK,以及前端数据展示方式
		1. 浏览器提供商非常非常多
			谷歌,火狐,欧朋,Safari,Edge
		2. 服务器提供服务
	软件更新:
		服务器更新数据,浏览器刷新就ok了
1.2 网络通信协议
协议:
	protocol协议
	网络通信协议是要求双方传递数据的计算机必须遵守的,按照对应的网络传输协议,才可以进入数据的交互和传递。

目前网络段数据传输比较常见的协议:
	UDP TCP/IP
1.3 UDP和TCP/IP区别
UDP
	1. 面向无连接,数据传递不算特别安全
	2. 因为面向无连接,传输速度快
	3. 因为面向无连接,数据传递存在丢包问题
	4. UDP没有客户端和服务器区别,都可以作为发送端和接收端
	UDP协议使用场景
		直播,网络游戏

TCP/IP
	1. 面向连接,数据传递较为安全
	2. 因为面向连接,所有传递速度较慢
	3. 面向连接,数据传递有保障
	4. TCP/IP协议是有明确的服务器和客户端概念
	TCP/IP协议使用场景
		客户端登陆,数据下载,文件传输
1.4 网络编程的三要素
1. 协议
	两个在于网络情况下的计算机数据传递,都需要对应的协议来完成。

2. IP地址
	Internet Protocol Address
	当前计算机在网络中的一个地址编号,类似于手机号号码
IP地址有IPv4协议和IPv6协议
IPv4是一个32位的二进制数,通常展示效果是a.b.c.d 例如 192.168.1.1
	a.b.c.d 各代表0 ~ 255的数字,目前已经消耗殆尽 42亿个
IPv6
	IPv6是能够保证地球上的每一粒沙子都有一个IP地址。
	128位地址长度,16字节一组
	8组 0x0 ~ 0xFFFF

3. 端口号
	端口号是当前应用程序在计算机中的一个编号。可以让计算机明确知道,当前的数据是给予那一个程序使用,或者数据从哪一个程序出现的。
	端口号是一个short类型 0 ~ 65535
	0~1024不能用于自定义端口号使用,特定的系统端口号
2. IP类
SUN公司提供给开发使用的IP地址类
	InetAddress
常用方法:
	InetAddress getLocalhost();
		获取本机IP地址类对象
	InetAddress getByName(String str);
		根据指定的主机名获取对应的IP地址对象
	InetAddress[] getAllByName(String str);
		获取指定主机名,或者域名对应的所有IP地址类对象
3. UDP协议数据传输
3.1 UDP数据传输方式
User Datagram Protocol 
	数据传递采用数据包方式传递,所有的数据要进行打包操作,并且没有对应的客户端服务器概念,有且只有发送段和接收端
	
Socket 套接字
	数据需要进行传递操作,在数据传递的两台计算机当中必须有对应的Socket。这里采用UDP协议,那么必须有一个UDP协议的Socket
	DatagramSocket();
		创建一个发送端UDP协议Socket对象
	DatagramSocket(int port);
		创建一个接收端UDP协议的Socket对象,这里需要【监听】指定端口
		
发送端数据包的打包方法:
	DatagramPacket DatagramPacket(byte[] buf, int length, InetAddress address, int port);
	buf: 需要传递数据的字节数组
	length:是当前字节数组中数据容量字节数
	address:接收端IP地址对象
	port: 接收端对应的端口号

接收端数据包接收方式
	这里需要准备一个空的数据包
	DatagramPacket DatagramPacket(byte[] buf, int length);
	buf: 字节缓冲数组,通常是1024整数倍
	length: 当前字节缓冲数组的容量
3.2 发送端
流程:
	1. 创建UDP服务器对应的发送端Socket
	2. 准备对应数据包,需要带有指定数据
	3. 发送数据 send
	4. 关闭UDP发送端
3.3 接收端
流程:
	1. 打开UDP服务,并且监听指定端口
	2. 创建新的空数据包
	3. 通过Socket接收数据 
	4. 关闭UDP服务接收端
3.4 UDP数据传递丢失问题
1. 网络不够好,稳定性不行,带宽不够
2. 电脑性能不好
4. TCP
4.1 TCP概述
TCP相对于UDP比较稳定的传输协议,这里存在三次握手,保证连接状态,同时有明确的客户端和服务端之分
	TCP服务中需要服务器端先启动,需要监听指定端口,等待客户端连接。
	客户端主动连接服务器,和服务器连接之后,才可以进行数据交互,服务器不能主动连接客户端的。

TCP操作而言,Java中提供了两个Socket
	1. 服务端Socket 
		java.net.ServerSocket;
		创建对应的ServerScoket开启服务器,等待客户端连接
	2. 客户端Socket
		java.net.Socket
		创建客户端Scoket,并且连接服务器,同时将Socket发送给服务器绑定注册。
4.2 Socket 客户端Socket
给客户端提供数据传输的符合TCP/IP要求的Socket对象

构造方法 Constructor
	Socket(String host, int port);
		host是服务器IP地址,port对应服务器程序的端口号
		通过指定的服务器IP地址和端口号,获取TCP连接对象

成员方法 Method	
	InputStream getInputStream();
		获取Socket对象输入字节流,可以从服务器获取对应的数据
		InputStream是一个资源,需要在程序退出是关闭
		Read
	
	OutputStream getOutputStream();
		获取Sokcet对象输出字节流,可以发送数据到服务器
		OutputStream是一个资源,需要在程序退出是关闭
		Write
	
	void close();
		关闭客户端Socket
	
	void shutdownOutput();
		禁止当前Socket发送数据

TCP/IP协议对应的Socket是给予IO流实现的。
4.3 ServerSocket服务端Socket
在服务端开启Socket服务器
构造方法 Constructor:
	ServerSocket(int port);
		开启ServerSocket服务器,并且明确当前服务端口是谁

成员方法 Method:
	Socket accept();
		监听并且连接,得到一个Socket对象,同时该方法是一个阻塞方法,会处于一个始终
		的监听状态
		返回的是Socket,也就是客户端Socket对象,获取到当前Socket对象,相对于获取到
		客户端连接,同时使用的Socket和客户端一致。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值