1.网络编程概述
计算机网络:
是指将地理位置不同的 具有独立功能的多台计算机以及外部设备 通过通信线路连接起来
实现 资源共享 和 信息传输
网络编程:
就是用来实现互联网的不同计算机上运行的应用程序间数据的交换
网络编程三要素:
IP地址 端口号 传输协议
IP地址:
每个设备在网络中的唯一标识
ipconfig 命令 可以查看本机的ip地址
ping 命令 测试连接
IPV4 4个字节组成 0~255之间
IPV6 每组4个16进制数
两个特殊的ip地址:
127.0.0.1 本地回路地址 就是代表本机 ---> localhost
255.255.255.255 广播地址
端口号:
给不同的网络程序都设置了一个不同的标识 这个标识就是端口号
端口 是逻辑端口 不是网线的逻辑端口
端口号 由0-65535数字组成 任选
0~1024一般被系统保留 不建议使用
常见顿口:
mysql数据库 3306
oracle数据库 1521
web 80
tomcat服务器 8080
qq 4000
飞秋 2425
端口号是可以修改的
http://localhost:8080/项目名/应用java
传输协议:
传输协议是定义的通信规则
国际组织定义了一个通用的网络通信协议 TCP/IP(包括局域网/广域网)
联网的终端设备 为了更好的进行信息交互
要遵守这一规则
数据传输:
首先会从客户端的应用层开始 将数据一层一层向下打包
(包里面包括你要传输的数据 你的ip地址 端口号 接收方的ip 端口号)
然后 发送到服务器 服务器接收到数据包后 再一层层向上拆包
2.Socket套接字
网络编程 其实就是Socket编程
Socket套接字
网络上具有唯一标识的ip地址和端口号的组合
用来唯一标识某个应用程序
通信的两端 必须都有Socket -->码头
网络通信 就是Socket间的通信
数据在两个Socket之间 通过IO流进行传输
例如 我的电脑安装了 qq 你的没装 就不能用qq通信
3.InetAddress类
ip地址类
String getHostAddress() 返回 IP 地址字符串(以文本表现形式)。
static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。
static InetAddress getLocalHost() 返回本地主机。
4.UDP概念和案例
概念:
UDP 用户数据报协议
特点:
面向无连接
数据不安全
速度快
不区分客户端和服务端
发送的数据大小有限制 一次不能超过64k
例如:
对讲机
快递包裹 封包 --> 地址 --> 如果地址不存在 --> 包裹就丢失了
java.net 包下的类
DatagramSocket此类表示用来发送和接收 数据报包 的套接字
构造方法
DatagramSocket() 表示创建一个默认的套接字 并绑定到本地地址和一个随机端口号
DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。
常用方法
void send(DatagramPacket p) 从此套接字发送数据报包。
void receive(DatagramPacket p) 从此套接字接收数据报包。
DatagramPacket 此类表示数据报包。
构造方法
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包 发送 到指定主机上的指定端口号。
从buf数组中 取出length长的数据 创建数据包对象 目标是 address地址上的port端口上
DatagramPacket(byte[] buf, int length)
构造 DatagramPacket,用来 接收 长度为 length 的数据包
将数据包中的length长的数据 装进buf数组中
常用方法:
byte[] getData() 获取数据
int getLength() 获取数据的长度
InetAddress getAddress() 获取ip地址
int getPort() 获取端口号
5.TCP概念和案例
概念:
TCP传输控制协议
特点:
面向连接(三次握手)
数据安全
速度略慢
分为客户端和服务端
面向连接
打电话
客户端向服务端发起请求
服务端响应请求
客户端向服务端发送数据
客户端
java.net
Socket
此类实现客户端套接字
Socket(String host, int port)
创建一个流套接字并将其连接到指定主机上的指定端口号。(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
InputStream getInputStream() 返回此套接字的输入流。
OutputStream getOutputStream() 返回此套接字的输出流。
InetAddress getInetAddress() 返回套接字连接的地址。
void shutdownInput() 此套接字的输入流置于“流的末尾”。
void shutdownOutput() 禁用此套接字的输出流。
服务端
ServerScoket
此类实现服务器套接字。服务器套接字等待请求通过网络传入。
它基于该请求执行某些操作,然后可能向请求者返回结果。
Socket accept()
侦听并接受到此套接字的连接。
主要用于将中文字符串转换为可传输的字符串 static String encode(String s, String enc) 用于将中文字符串转换为可传输的字符串,并指定字符集。编码 static String decode(String s, String enc) 用于将编码后的字符串转换为中文字符串,并指定编码时的字符集。解码