网络编程概述、套接字(Socket)(java小白进阶Day14)
网络编程概述
计算机网络
网络模型(OSI开放式系统互联,国际标准组织制定了OS七层网络模型)
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
协议:事先规定好的通信规则
协议分类:公有的、私有的
网络层协议:IP协议
传输层协议:UDP协议、TCP协议
应用层:http,ftp、https
IP地址
IP地址:表示网络上唯一台计算机
IP协议分为两个版本:TPV4 IPV6
端口:0-65535 (0-1024)预留的
域名解析:localhost(www.163.com):127.0.0.1(72.1.1.1)
Java中的网络编程
1、UDP–写信
不需要创建连接
通过发送数据包通信 每个数据包最大64K
不可靠哦的传输机制
传输速度比较快
追求速度快,可靠性要求不高的场景下–视频聊天
//基于UDP协议 //收信的 public class Demo2Reveive { public static void main(String[] args) throws IOException { //socket编程(套接字编程) //1、创建套接字对象(端口号) DatagramSocket ds = new DatagramSocket(6666); //2、使用数据包对象来接收数据 byte[] data = new byte[5]; DatagramPacket dp = new DatagramPacket(data,data.length); ds.receive(dp);//接收数据 String msg = new String(dp.getData()); System.out.println(msg); //3、关闭套接字对象 ds.close(); } } //写信 public class Demo2Send { public static void main(String[] args) throws IOException { //1、创建套接字对象 DatagramSocket ds = new DatagramSocket(); //2、发送信息 // msg内容、IP地址、端口号 String msg = "hello"; DatagramPacket dp = new DatagramPacket(msg.getBytes(), msg.length()); dp.setSocketAddress(new InetSocketAddress("localhost",6666)); ds.send(dp); //3、关闭套接字 ds.close(); } }
2、TCP协议
需要先创建连接 ,并且在创建连接的过程中 - 需要经过三次
底层通过流发送数据,数据没有大小限制
可靠的传输机制 - 丢包重发,报的顺序没有保障
传输相对较慢
对于速度要求不太高,但可靠性要求较高的场景下
应为TCP
套接字
Socket:
1> TCP/IP协议通信的中间软件抽象层
2> 使用方法:
先初始化,后与端口绑定,对端口进行监听
调用accept()阻塞,等待客户端连接
推荐Socket原理讲解
https://blog.csdn.net/pashanhu6402/article/details/96428887
复习:
线程:两种实现方式:
extends Thread
implements Runnable
1、构造方法
Thread();
Thread(String name);
Thread(Runnable r);
Thread(Runnable r,String name)
2、常用方法
run()线程体方法
start()启动线程
currentThread()返回正在执行的线程对象
getName()返回线程的名称
sleep()线程休眠
join()等待线程执行结束
3、生命周期:
新建状态:new Thread()
就绪状态:start()
阻塞状态:sleep(),wait(),io解除,重新排队
运行状态:run()执行方法,自动执行的
消亡状态:执行完run()方法
4、优先级
系统自动分配:5
人为设置
5、调度
不同优先级:高优先级优先执行
同一优先级:先到先服务
6、线程同步:
共享变量不安全
synchronized
同步块:synchronized(锁对象) { }
同步方法:synchronized修饰方法
7、同步线程之间的通信问题
wait();
notify();
notigyAll();
8、sleep()和wait()区别
sleep线程类的方法 wait是Object类的方法
sleep方法不是释放锁 wait是释放锁
sleep方法自动醒 wait必须通过使用notify,notifyAll唤醒
9、线程的死锁
10、线程池
1>为什么使用线程池
频繁的创建线程,需要消耗时间和内存
2>使用线程池的好处
管理线程
使线程重用
3>创建线程池
newCacheThreadPool() //可创建多个线程
newFixedThreadPool(3) //创建3个线程♥常用♥♥
newScheduledThreadPool(5) //excute(Runnable的子类,1,5,TimeUnit,SECONDS)
//多个参数可延迟启动,间隔5seconds
newSingleThreadPool() //创建单个线程池
4>关闭线程池
shutdown() //不关闭正在执行的线程
shutdownNow() //不管是否执行完毕都关闭
- Java笔记(9)-网络编程、URL、InetAddress、套接字、Socket、ServerSocket、多线程、UDP、广播数据包、远程调用
- 【网络编程1】Java套接字Socket
- java 基于socket套接字的低层次网络编程
- 【网络编程5】Java与Python套接字Socket通信的例子
- java进阶 ------ 基于Socket低层次网络编程
- java进阶 ------ 基于Socket低层次网络编程
- Java网络编程(16):客户端套接字(Socket)的超时
- 基于Socket(套接字)的低层次Java网络编程
- 网络编程一:概述、网络模型、TCP\UDP、Socket套接字、UDP发送和接收、UDP聊、阻塞式方法
- Java网络编程--套接字Socket
- Java网络编程之套接字(Socket编程)
- Java套接字(Socket)网络编程入门
- Java网络编程从入门到精通(16):客户端套接字(Socket)的超时
- java编程_socket_套接字_网络编程
- Java网络编程(19):套接字(Socket)的异常
- java网络编程——Socket和ServerSocket,套接字编程——简单聊天室
- java网络编程--socket套接字
- java网络编程——Socket和ServerSocket,套接字编程——简单聊天室改进
- Java网络编程从入门到精通(19):套接字(Socket)的异常
- 2019最新java Socket网络编程进阶与项目实战(完整)