0
点赞
收藏
分享

微信扫一扫

【Java高级特性】java学习之旅36-网络编程

Villagers 2022-03-12 阅读 81

网络通信协议:

  1. 应用层:
  1. 传输层:
  1. 网络层
  1. 数据链路层
  2. 物理层

IP:

  1. 网络地址:唯一标识网络上的每一台计算机
  2. 地址组成:32位,由4个8位二进制数组成。
  3. 本地ip的表现形式:
  1. 常用的指令:

DNS:

  1. Domain Name System, 域名解析系统
  2. DNS是一个分布式服务器系统,实现了域名和ip地址的隐射
  3. 我们请求域名(www.baidu.com),会先进行DNS的解析,得到ip地址后,继续请求ip地址对应的主机。

java.net包下的类

1. URL类:

url:统一资源定位符,例如:http://www.longge.vip//study/javacore.avi;

分析:协议://域名(ip)/资源路径/资源名

  1. 构造方法
URL url = new URL("http://www.longge.vip/study.java");
System.out.println(url);
  1. encode(),将网站中的中文字符加密
String encodeStr = URLEncoder.encode("http://www.longge.vip/study","utf-8");
  1. 将网址中的乱码解码 decode();
String decoderStr = URLDecoder.decode(emcoderStr,"utd-8")
  1. 查看本机的ip
InetAddress localHost = InetAddress.getLocalHost();
  1. 查看域名映射的ip
InetAddress ip1 = InetAddress.getByName("www.baidu.com");
  1. 查看域名映射的所有ip
InetAddress[] ips = InetAddress.getAllByName("www.taovao.com");
  1. 通过ip地址创建对象
InetAddress ip2 = InetAddress.getByAddress(new byte[] {(byte)192, (byte)168, 1, (byte)172});

实现网络编程:

TCPUDP
面向连接的面向非连接
是安全的是不安全的
比较慢比较快
适合传输大文件适合传输小文件

注意:
输出流关闭造成的Socket关闭

TCP + Socket 网络编程:

//TCP client
private static Scanner sc = new Scanner(System.in);

public stataic void main(Stringp[[ args) throes Exception{
    
    //1. 创建Socket对象,指定主机地址和端口号
    Socket client = new Socket("localhost" , 1904);
    System.out.println("客户端启动完毕!");
    
    //2.创建一个输出流用于发送数据给主机
    DataOuputStream dos = new DataOutputStream(client.getOutputStream());
    
    //3.发送数据
    dos.writeUTF(sc.next());
    
    //4. 创建一个输入流用于接收服务器发送的数据
    DataInputStream  dis = new DataInputStream(client.getInputStream());
    
    //5.接收服务器发送的请求
    String message = dis.readUTF();
    System.out.println(message);
}
//TCP server

//1.创建ServerSocket对象,指定端口号
ServerSocket server = new ServerSocket(1904);
System.out.println("服务器启动完毕");

//2. 监听客户端请求
Socket client = server.accept();
System.out.println("服务器监听到客户端连接!")

//3. 创建输入流用于接收客户端发送的数据
DataInputStream dis = new DataInputStream(client.getInputStream());

//4. 获取客户端发送的数据
String message = dis,readUTF();
System.out.println(message);

//5.创建输出流用于发送消息到客户端
DataOutputStream dos = new DataOutputStream(client.getOutputStream());

//6. 发送数据
dos.writeUTF("你好,我是服务器");

//7.关闭资源
dos.close();
dis.close();
client.close();
server.close();

UDP + Socket 实现网络编程:

//client1
public static void main(String[] args) throws IOException{
    
    //1. 创建DatagramSocket对象,指定端口号
    DatagramSocket client1 = new DatagramSocket(6666);
    
    //2. 创建DatagramPaclet对象,用于包装数据
    String message = "hello, 我是客户端1";
    DatagramPacket packet = new DatagramPacket(message.getBytes(), message.getBytes().length, InetAddress.getByName("localhost"), 8888);
    
    //3. 发送打包好的数据
    client1.send(packet);
    
    //4. 关闭资源
    client1.close();
}
//client2
public static void main(String[] args) throws Exception{
    //1. 创建DatagramSocket对象
    DatagramSocket client2 = new DatagramSocket(8888);
    
    //2. 接收客户端1发来的请求
    byte[] buf = new byte[1024];
    DatagramPacket packet = new DatagramPacket(buf, buf.length);
    client2.receive(packet);
    
    //3. 查看接收到的数据
    byte[] data =  packet.getData();
    System.out.println(new String(data);
    
    //关闭资源
    client2.close();
}

作业:
实现控制台群聊功能

举报

相关推荐

0 条评论