回顾网络编程(前面只讲了基于TCP/IP协议编程常用的还有URL编程(自行了解下)和UDP编程(使用DatagramPacket存储发送/接收数据)操作大同小异)
//发送端
@Test
public void sender() throws IOException {
DatagramSocket socket = new DatagramSocket();
byte[] arr="我是一个UDP数据".getBytes(StandardCharsets.UTF_8);
DatagramPacket data = new DatagramPacket(arr,0, arr.length, InetAddress.getLocalHost(),8888);
socket.send(data);
socket.close();
}
//接收端
@Test
public void reciver() throws IOException {
DatagramSocket data = new DatagramSocket(8888);
byte[] arr=new byte[1024];
DatagramPacket p = new DatagramPacket(arr,0,arr.length);
data.receive(p);
System.out.println(new String(p.getData(),0, p.getLength()));
data.close();
}
ServerSocket: 服务端类(端口号)
Socket: 客户端类(服务端IP 端口号)
IP地址: 0-255.0-255.0-255.0-255
什么是IP地址: 由4段长度为1个字节(8位bit)的十进制数字组成的
IP的作用: 逻辑的标识网络中的一台电脑(无线路由)
IPv4 2011年已经用尽
win7 设置多了IPv6(世界上的每粒沙子都可以分配一个地址)
端口号:
什么是端口号: 0-65535的范围数字
用来区别一台电脑中的不同软件的标识号
端口号越少越好
0-1023系统保留(开发者不设置)
1024-65535是程序员用的
-------------------------多线程
刷牙洗脸5分钟 烧个开水5分钟 煮蛋器煮鸡蛋3分钟
单线程 : 13分钟
多线程 : 5分钟(打个比方)
但是上面3个事情是可以同时进行的, 理论上说可以用X分钟解决(多线程)
举例: 电脑可以同时听歌, 聊天, 看视频, 浏览网站....
举例: 银行排队处理业务
Java语言的另一个特性就是支持多线程编程, 在了解多线程之前
首先需要了解三个概念: 什么是程序, 什么是进程, 什么是线程 ?
程序 : 程序是硬盘上静态的代码集合体(为完成某个任务使用某种语言编写的指令集合)
进程 : 当程序一旦运行, 就会加载到内存中, 随后交给CPU处理
系统为其分配资源的话, 那么就变成了进程, 一个程序有多个进程(可以简单的理解为运行中的程序)
线程 : 线程是存在与进程中的, 是进程中额外的执行代码, 一个进程中又有多个线程(进程中的一条执行路径)
单线程: 同一时间程序只能做一件事(早期的DOS系统, 只能运行1个软件)
多线程: Java程序的特点之一, 支持多线程, 在同一时间有多段代码在执行
实现多线程有四种途径:
1. 继承java.lang.Thread类: 它是一个线程类, 凡是需要执行多线程的类都需要继承它
准备执行某个线程的时候, 调用start()方法
2. 实现java.lang.Runnable接口: 解决Java的软肋(单继承)
重写run()方法
new Thread(new Runnable实现类()).start()
3.实现Callable<T>接口:比较常用因为可以抛出异常和返回值,使用FutureTask接收
4.线程池:开发常用(Executors.newXxx)根据业务需求创建线程池
网络编程结合多线程
数据通信中分为3种通信方式:
1. 单工: 永远只能在一个方向上传递数据(广播)
2. 双工
半双工 : 可以传递在两个方向上, 但是同一时间只能实现一个方向(对讲机)
全双工 : 可以同时在两个方向上传递数据(电话)