学习内容: 38初试网络编程
学习难度: 6
重要性: 8
初试网络编程
参考资料:Java网络编程
1.什么是网络编程?
在网络通讯协议下,不同计算机上运行的程序,进行数据传输
应用场景:即时通讯,网游对战,金融证券,国际贸易,邮件等
不管是什么场景,都是计算机跟计算机之间通过网络协议进行数据传输
Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序。
2.常见软件架构
1. C/S:Client/Server 客户端/服务端
2. B/S:Browser/Server 浏览器/服务端
3.网络编程三要素
1.IP:设备在网络中的地址,是唯一的标识。
2.端口号:应用程序在设备中唯一的标识。
3.协议:数据在网络中传输的规则,常见的协议有UDP,TCP,Http,Https,ftp。
4.网络协议
5.java中的对象
1.InetAddress
InetAddress的对象表示IP地址的对象,其包含两个子类(Inet4Address,Inet6Address)分别表示ipv4的对象和ipv6的对象,通常我们会通过getByName静态方法来获取对应子类的对象,该方法在底层会判断ip地址的类型,返回对应类型的对象。
InetAddress address = InetAddress.getByName("qc-server.zust.online");
System.out.println(address);
//qc-server.zust.online/240e:390:34a9:27d0:2acb:49d7:d351:c01c
输出的结果为HostName/HostAddress
6.利用UDP协议发送和接收消息
一、创建DatagramSocket对象
细节:
1.绑定端口 以后我们会通过这个端口向外发送数据
空参: 所有可用端口中随机一个进行使用
有参:指定端口进行绑定
二、打包数据
参数
byte[]:字节数组,InetAddress:服务器ip,port:服务器端口
//2.打包数据
String str = "Hello World!";
byte[] bytes = str.getBytes();
InetAddress serverName = InetAddress.getByName("localhost");
DatagramPacket sp = new DatagramPacket(bytes, bytes.length,serverName,2333);
三、发送数据
ds.send(sp);
四、释放资源
ds.close();
五、接收端的处理方法也是类似的
不过接收端一定需要绑定端口,这个端口必须和发送端中填写的端口号是一致的
public class UDPRecvMsgDemo {
public static void main(String[] args) throws IOException {
//接收数据
//1.创建DatagramSocket对象 DatagramSocket ds = new DatagramSocket(2333);
//2.接收数据包
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
ds.receive(dp);
//3.解析数据包
byte[] data = dp.getData();
int len = dp.getLength();
InetAddress address = dp.getAddress();
int port = dp.getPort();
System.out.println("接收到数据" + new String(data, 0, len));
System.out.println("该数据是从" + address + " 的 " + port + "端口发出的");
//4.释放资源
ds.close();
}
}
7.利用TCP协议发送和接收数据
TCP协议是一种可靠的网络协议,它在通讯的两端各建立一个Socket对象
通讯之前要保证连接已经建立,通过Socket产生IO流来进行网络通讯
注意:通讯过程中使用IO流!
学习内容: 39网络编程进阶内容
学习难度: 6
重要性: 8
网络编程进阶
一、TCP三次握手
作用:保证链接的建立
二、TCP四次挥手
作用:确保连接断开,且数据处理完毕
三、多发多收案例
客户端:多次发送数据
服务端:多次接受数据并打印
四、接受与反馈案例
客户端:发送一条数据,接受服务端反馈的消息并打印
服务端:接受数据并打印,再给客户端反馈消息
五、上传文件案例
客户端:将本地文件上传到服务器。接收服务器反馈。
服务端:接收客户端上传的文件,上传完毕之后给出反馈。