1.计算机网络
1.1概述
什么是网络:由点(计算机)和线(网线)构造的网状结构
什么是计算机网络:不同区域的计算机,通过线路连接能够实现数据传递与资源共享的方式
什么是网络编程:实现数据传递与资源共享的具体技术
1.2网络模型
概述:在实现通讯过程中的软硬件结合的操作
1.3网络编程三要素
IP地址:
计算机的唯一标识
有两种IP地址表示:
IPV4:分4个段,每个段最高为255;例如:192.168.1.6
IPV6:分8个段,每个段最高位FFFF;(十六进制)IPV4分类:
A类:从1开始~126段
B类:127开始~191段
C类:192开始~223段(10个以内)
D类:224开始~239段回环地址:127.0.0.1,代表本机测试地址
Port:
通讯软件的唯一识别:(0~65535)
0~1024: 系统已经分配或保留的端口,一般不去使用
1024以后可以使用
避开一些常用端口:例如3306,8080,1521等协议:
TCP,UDP协议
TCP:面向连接的协议,安全但效率低--例如:打电话
UDP:无连接的协议,不安全但效率高--例如:发短信
2.网络编程
2.1INetAddress类
INetAddress类: 代表IP地址对象的类
可以调用相关方法得到IP地址
public class Test1 {
public static void main(String[] args) throws UnknownHostException {
//通过ip或主机名或域名得到ip对象
InetAddress net1 = InetAddress.getByName("192.168.1.8");
System.out.println(net1);
//一个域名可能绑定多台服务器(多个IP)
InetAddress[] nets = InetAddress.getAllByName("www.baidu.com");
System.out.println(Arrays.toString(nets));
InetAddress net2 = InetAddress.getLocalHost();
System.out.println(net2); //获取本机IP
}
}
2.2TCP-客户端发数据到服务器
TCP编程:也叫做Socket编程,基于tcp协议的字节流的传输协议
通讯模型: 客户端-服务器模型
服务器:
1.实例化服务器Socket对象,指定自身端口
2.监听客户端的连接,如果有客户端连接了,那么创建一个socket与客户端通讯客户端:
1.实例化socket对象,传入服务器的ip和端口谁先启动? 服务器先启动,有监听阻塞方法
//案例:服务器与客户端建立TCP连接后,进行通讯;
//客户端给服务器发数据,服务器也可以给客户端发数据
public class Server {
public static void main(String[] args) throws IOException {
//实例化服务器socket,指定自身端口
ServerSocket serverSocket = new ServerSocket(9527);
//调用accept监听客户端连接,如果有客户端连接了,则创建了socket对象与客户端通讯
Socket socket = serverSocket.accept(); //阻塞方法
System.out.println("有一个客户端连上来了");
//接收数据--读
InputStream is = socket.getInputStream();
byte[] b = new byte[1024];
int len = is.read(b);
System.out.println(new String(b, 0,len));
//服务器发送数据--写
OutputStream os = socket.getOutputStream();
os.write("服务器回应给客户端的数据".getBytes());
IOUtils.closeAll(is,os,socket,serverSocket);
}
}
-----Client-------
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("127.0.0.1", 9527);
//通过字节流发数据--写
OutputStream os = socket.getOutputStream();
os.write("客户端发送的数据..".getBytes());
//客户端的接收--读
InputStream is = socket.getInputStream();
by