您的位置:首页 > 理论基础 > 计算机网络

网络编程概述、套接字(Socket)(java小白进阶Day14)

2020-08-04 19:35 274 查看

网络编程概述

计算机网络

网络模型(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() //不管是否执行完毕都关闭

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: