计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外设设备,通过通信线路连接起来,在网络操作系统,网络管理软件,网络通信协议的管理,协调下,实现资源共享和信息传递的计算机系统.
java web-网页编程
B/S 网络编程-TCP/IP C/S
java.net.InetAddress
此类表示Internet(IP)地址
IP地址
InetAddress
唯一定位一台网络上计算机 127.0.0.1–本机localhost
IP地址分类
ipv4/ipv6----ipv4 127.0.0.1 4个字节组成,0-255
ipv6 128位,8个无符号整数.
公网(互联网)-私网(局域网)
A,B,C,D四类地址
域名–记忆IP问题.
try {
//查询本机地址
InetAddress address1 = InetAddress.getByName("127.0.0.1");
System.out.println(address1);
InetAddress address2 = InetAddress.getByName("localhost");
System.out.println(address2);
InetAddress address3 = InetAddress.getLocalHost();
System.out.println(address3);
//查询网址ip
InetAddress address4 = InetAddress.getByName("www.baidu.com");
System.out.println(address4);
//常用方法
System.out.println(address4.getAddress());
System.out.println(address4.getCanonicalHostName());//规范的名字
System.out.println(address4.getHostAddress());//IP
System.out.println(address4.getHostName());//域名,或者自己电脑的名字
} catch (UnknownHostException e) {
e.printStackTrace();
}
端口
不同的软件有不同的端口号,用来区分软件.
TCP,UDP 0-65535 tcp 80 udp 80 单个协议下,端口号不能冲突
端口分类
公有端口:0-1023 HTTP 80 HTTPS 443 FTP 21 TELENT 23
程序注册端口:1024-49151 分配用户或者程序 Tomcat 8080 mysql 3306 Oracle 1521
动态,私有 49152-65535
netstat -ano #查看所有端口
netstat -ano|findstr "5900" #查看指定的端口
tasklist|findstr "8696" #查看指定端口的进程
TCP/IP协议簇:实际上是一组协议
TCP 用户传输协议
连接稳定
三次握手,四次挥手
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n5mWI4iF-1587753687377)(C:\Users\ThinkPad\AppData\Roaming\Typora\typora-user-images\1584502858999.png)]
A:你瞅啥 ------>B:瞅你咋的------> A:干一架
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ay2RsUfN-1587753687385)(C:\Users\ThinkPad\AppData\Roaming\Typora\typora-user-images\1584503003747.png)]
A:我要走了----->B:你真的要走了吗?------>B:你真的真的要走了吗?------>A:我走了
客户端,服务端
传输完成,释放连接,效率低
UDP 用户数据报协议
不连接,不稳定
客户端,服务端:没有明确的的界限
不管有没有准备好,都可以发给你
DDOS洪水攻击!(饱和攻击)
出名的协议 TCP IP网络互连协议
TCP
客户端
1.连接服务器Socket
2.发送消息
Socket socket=null;
OutputStream os=null;
try {
//1.获得服务器地址
InetAddress serverIP = InetAddress.getByName("127.0.0.1");
int port=9999;
//2.创建一个socket连接
socket = new Socket(serverIP, port);
//3.发送消息(IO流)
os = socket.getOutputStream();
os.write("I will attend ICCCBDA in Chengdu".getBytes());
} catch (IOException e) {
e.printStackTrace();
}finally {
if (os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket!=null){
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器
1.建立服务的端口 ServerSocket
2.等待用户的连接 accept()
3.接收客户的消息
//1.服务器地址
serverSocket = new ServerSocket(9999);
while(true) {
//2.等待客户端连接过来
socket = serverSocket.accept();
//3.读取客户端消息
is = socket.getInputStream();
// byte[] buffer = new byte[1024];
// int len;
// while ((len=is.read(buffer))!=-1){
// String msg = new String(buffer, 0, len);
// System.out.println(msg);
// }
//管道流
baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
System.out.println(baos.toString());
} } catch (IOException e) {
e.printStackTrace();
}finally {
if (baos!=null){
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket!=null){
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (serverSocket!=null){
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
UDP
没有服务端,客服端概念
发送消息
发送端
public class UdpClient {
public static void main(String[] args) throws IOException{
//1.建立Socket
DatagramSocket socket = new DatagramSocket();
//2.建个包
String msg="Hello,Server";
InetAddress localhost = InetAddress.getByName("localhost");
int port=9090;
//数据,数据的长度起始,要发送给谁
DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);
socket.send(packet);
//关闭流
socket.close();
}
}
public class UdpServer {
public static void main(String[] args) throws IOException {
//开放端口
DatagramSocket socket = new DatagramSocket(9090);
//接收数据包
byte[] buffer= new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
//阻塞式接收
socket.receive(packet);
//关闭连接
socket.close();
System.out.println(packet.getAddress().getHostAddress());
System.out.println(new String(packet.getData(),0,packet.getLength()));
}
}
接收端
Tomcat
URL
https://www.baidu.com/ 协议://ip地址:端口/项目名/资源
统一资源定位符:定位资源的,定位互联网上的某一个资源
DNS域名解析 www.baidu.com xxx.x.x.xxx
.bat Windows下启动命令 .sh Linux下启动命令