1.1、概述
本博文是学习b站up主狂神的视频,狂神讲Java,所做的学习笔记
狂神:只要学不死,就往死里学
地球村
信件:
网络编程的目的:
- 无线电台…
- 传播交流信息
- 数据交换
- 通信
想达到效果需要什么:
- 如何准确的定位网络上的一台主机? IP:端口号,定位到这个计算机的某个资源
- 找到了主机,如何传输数据?
javaweb编程:网页编程 B/S
网络编程 :TCP/IP C/S
1.2、网络通信的要素
通信双方的地址:
- ip
- 端口号
规则:网络通信的协议
- TCP/IP参考模型
1.3、IP
ip地址:InetAddress
唯一定位一台网络上的计算机
127.0.0.1 本机localhost
ip地址分类:
-
ipv4/ipv6
- IPV4 :4个字节,0~255,42亿;30亿在北美,亚洲4亿,2011年就用光了
- IPV6 :128位,8个无符号整数!
-
公网-私网
-
192.168.x.x ,专门给组织内部使用
-
ABCD类地址
-
域名:记忆IP问题!
package com.xwy.lesson01;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* @author levi
* @create 2020/7/28 4:14 下午
*/
public class TestIntetAddress {
public static void main(String[] args) {
try {
//查询本机
InetAddress Name = InetAddress.getByName("127.0.0.1");
System.out.println(Name);
InetAddress Name3 = InetAddress.getLocalHost();
System.out.println(Name3);
//查询百度地址
InetAddress Name2 = InetAddress.getByName("www.baidu.com");
System.out.println(Name2);
//常用方法
// System.out.println(Name2.getAddress());
// System.out.println(Name2.getCanonicalHostName()); //规范名字 ip
System.out.println(Name2.getHostAddress()); //ip
System.out.println(Name2.getHostName()); //域名或者本机名字
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
1.4 、端口
端口表示计算机上的一个程序的进程
-
不同端口号有不同端口号!用来区分软件
-
被规定0~65535
-
TCP,UDP:65532*2, 不同协议的同名端口不冲突
-
端口分类:
- 公有端口:0~1023
- HTTP:80
- HTTPS:443
- FTP:21
- Telent:23
- 程序注册端口:1024~49151,分配用户或程序
- tomcat:8080
- …
- 动态、私有:49152~65535
netstat -ano #查看所有端口 netstat -ano |findstr "5900" #查看指定端口 tasklist|findstr "5900" #查询指定端口进程
package com.xwy.lesson01; import java.net.InetSocketAddress; /** * @author levi * @create 2020/7/28 4:39 下午 */ public class TestIntetSocketAddress { public static void main(String[] args) { InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1",8080); System.out.println(inetSocketAddress); System.out.println(inetSocketAddress.getAddress()); } }
- 端口映射
- 公有端口:0~1023
1.5、通信协议
协议:约定,好比我们现在说的是普通话
网络通信协议:速率、传输码率、代码结构、传输控制
问题:非常的复杂!
TCP/IP协议簇,实际是一组协议
重要:
- TCP:用户传输协议
- UDP:用户数据包协议
出名的协议:
- TCP
- IP:网络互联协议
TCP/UDP对比:
TCP:打电话:
- 链接稳定
- 三次握手、四次挥手
最少需要三次,建立稳定连接
A:你瞅啥?
B:瞅你咋地?
C:干一场
A:我要断开
B:我知道你要断开了
B:你真的要断开了吗
A:我真的要走了
- 客户端、服务端
- 传输完成,释放链接,效率低
UDP:发短信
- 不链接、不稳定
- 客户端、服务端没有明确界限
- 不管准没准备好,都可以发给你
1.6、TCP
客户端
-
连接服务器socket
-
发送消息
package com.xwy.lesson02; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; /** * @author levi * @create 2020/7/28 4:54 下午 */ public class TcpClientDemo { public static void main(String[] args) { Socket socket = null; OutputStream os =null; //1 要知道服务器的地址 try { 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("hello xwy".getBytes()); } catch (Exception e) { e.printStackTrace(); }finally { if(os != null){ try { os.close(); } catch (IOException e) { e.printStackTrace(); } } if(socket != null){ try