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()
侦听并接受到此套接字的连接。