学习内容: 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四次挥手

作用:确保连接断开,且数据处理完毕



三、多发多收案例

客户端:多次发送数据
服务端:多次接受数据并打印

四、接受与反馈案例

客户端:发送一条数据,接受服务端反馈的消息并打印
服务端:接受数据并打印,再给客户端反馈消息

五、上传文件案例

客户端:将本地文件上传到服务器。接收服务器反馈。
服务端:接收客户端上传的文件,上传完毕之后给出反馈。

解决文件名重复的问题,可以使用randomUUID方法获取一个随机UUID的对象,作为服务端保存的文件名

六、BS架构接受浏览器消息并打印