一. 网络编程概述
定义
计算机网络
是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统
网络编程
用来实现网络互连的不同计算机上运行的程序间可以进行数据交换
IP地址
每个设备在网络中的唯一标识
每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址
ipconfig:查看本机IP
ping:测试连接
本地回路地址:127.0.0.1
IPv4:4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽
IPv6:8组,每组4个16进制数
端口号
每个程序在设备上的唯一标识
每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到哪台机器上,还要明确发到哪个程序
端口号范围从0-65535
编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了
协议
为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
UDP
面向无连接,数据不安全,速度快。不区分客户端与服务端。
TCP
面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。
三次握手: 客户端先向服务端发起请求, 服务端响应请求, 客户端发送确认信息
二. Socket通信
定义
网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字
通信的两端都有Socket
网络通信其实就是Socket间的通信
数据在两个Socket间通过IO流传输
Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的 IP和port
三. UDP传输
发送Send
创建DatagramSocket, 随机端口号
创建DatagramPacket, 指定数据, 长度, 地址, 端口
使用DatagramSocket发送DatagramPacket
关闭DatagramSocket
接收Receive
创建DatagramSocket, 指定端口号
创建DatagramPacket, 指定数组, 长度
使用DatagramSocket接收DatagramPacket
关闭DatagramSocket
从DatagramPacket中获取数据
接收方获取ip和端口号
String ip = packet.getAddress().getHostAddress();
int port = packet.getPort();
TCP协议
定义
客户端和服务器间的交流, 客户端发送信息,服务器接收到,并返回信息
长连接
使用步骤
客户端
创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
输入流可以读取服务端输出流写出的数据
输出流可以写出数据到服务端的输入流
服务端
创建ServerSocket(需要指定端口号)
调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
输入流可以读取客户端输出流写出的数据
输出流可以写出数据到客户端的输入流
总结:
网络传输的概述
ip : 通过ip可以找到网络中的一台机器
port : 通过端口号可以找到电脑中某个程序
ip+port : 一个套接字
udp : 快, 不安全 面向无连接
tcp : 慢 ,安全 面向有链接
UDP 编码
DatagramSocket
DatagramPacket
DatagramPacket包裹着ip地址,端口号, 数据, DatagramSocket发送包裹
接收端和发送端时平等的
TCP编程
Socket
ServerSocket
ServerSocket可以接收多个Socket , 每接收一个客户端连接, 就会创建一个Socket 和客户端通信
TCP的最大优点 : 两端是由一个通道连接, 可以随意传输数据, 不会受数据量大小的限制
服务端一般和多线程配合使用