欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > Java网络编程初阶

Java网络编程初阶

2025/3/9 18:54:04 来源:https://blog.csdn.net/qq_46987323/article/details/145965586  浏览:    关键词:Java网络编程初阶

目录

一、 初始网络编程

二、 相关网络知识介绍

1. 网络三要素

1.1. IP

1.1.1. IPv4

1.1.2. IPv6

1.2. 端口号

1.3. 协议

1.2.1. TCP

1.2.2. UDP

三、网络编程的实现

1. UDP的网络编程实现

1.1. 发送端

1.2. 接收端

2. TCP的网络编程实现

1.1. 客户端

1.2. 服务端

1.2.1. 乱码问题

总结


前言

本文介绍最初的java网络编程

在后面会更新练习的内容,在练习的内容来更深入理解网络编程

🏠我的主页:我的主页
📚系列专栏:系列专栏

一、 初始网络编程

网络编程顾名思义,就是在网络中的发送端接收端进行通信
用到网络就先了解一下网络

二、 相关网络知识介绍

这里我会介绍,网络编程会用到的网络相关知识,更全面次的网络知识,后期会发布的😊

1. 网络三要素

1.1. IP

IP就是在广域网中唯一标识( 是的,在广域网中可以通过IP知道用的是什么设备 )
在网络中,分为

  1. 局域网
  2. 城域网
  3. 广域网

所以这里强调的是在广域网中的唯一标识

1.1.1. IPv4

特点:点分十进制
        例如: 192.168.1.1
特殊IP:127.0.0.1(表示本机IP)
可以通过以下步骤查到本机ip

  1. win + r
  2. 输入cmd

        3. 输入 ipconfig


IPv4一共有4^32个,现在是已经用完了,但是我们在网络通信中,基本上还是用的IPv4

1.1.2. IPv6

因为IPv4用完了,现在很多地方都用了IPV6,之后也会变普遍的
特点:冒分十六进制
        例如: 00-01-00-11-2E-83-2E-0E-28-C5-F8-3D-49-47
有2^128个 

1.2. 端口号

端口号:应用程序设备中的唯一标识

这就和IP对应上了,可以这样理解

  • IP 这台设备
  • 端口号 就是这台设备上的某个应用程序

端口号的取值范围:0 ~ 65535
其中,0 ~ 1023 之间的端口号用于一些知名的网络服务或应用
我们使用 1024以上的端口号即可

1.3. 协议

协议:通信双方必须遵守的约定(规则)
因为本次网络编程只会涉及两个协议:TCP、UDP

1.2.1. TCP

TCP(传输控制协议)
面向连接
特点:速度慢,没有大小限制,数据是安全的
需要通信双方确立连接
应用:下载软件,发送邮件(因为这些不能让数据丢失)

1.2.2. UDP

UDP(用户数据报协议)
是面向无连接的
特点:一次最多发送64KB,数据不安全,易丢失
应用:打视频电话(反正就是卡一下而已)
UDP是只管发,不管你有没有接收到

接下来,就围绕网络三要素以及两个网络协议来分别讲解,网路编程的实现

三、网络编程的实现

1. UDP的网络编程实现

1.1. 发送端

步骤

  1. 创建 DatagramSocket
    绑定端口
    绑定端口,就是从这个端口发送数据
    没有端口,就是从任意端口发出
    因为是发出的数据,所以不用写
  2. 打包数据 
    DatagramPacket
  3. 发送数据
  4. 释放资源

DatagramPacket包含的4个内容

//发送数据
//1. 创建DatagramSocket对象
DatagramSocket host;
try {// 绑定端口,就是从这个端口发送数据// 没有端口,就是从任意端口发出host = new DatagramSocket();
} catch (SocketException e) {throw new RuntimeException(e);
}//2. 打包数据
String str = "欢迎来到艺杯羹的博客!";
// 转成字节数组
byte[] bytestr = str.getBytes();
//获取ip(电脑)对象地址
InetAddress address = InetAddress.getByName("192.168.1.50");
// 发送的端口号
int post = 8888;
// 打包数据中包含以下四个内容
// 1. 打包的字节数据
// 2. 打包的个数
// 3. 打包的地址
// 4. 打包的端口
DatagramPacket packet = new DatagramPacket(bytestr, bytestr.length, address, post);//3. 发送数据
try {host.send(packet);
} catch (IOException e) {throw new RuntimeException(e);
}//4.释放资源
host.close();
}

1.2. 接收端

步骤

  1. 创建 DatagramSocket 
    这里要指定接收的端口
    绑定的端口一定要跟发送的端口保持一致
  2. 接收数据包
  3. 解析数据包
  4. 释放资源

public static void main(String[] args) throws SocketException {// 创建Datagramsocket对象// 注意://在接收的时候,一定要绑定端口//而且绑定的端口一定要跟发送的端口保持一致DatagramSocket receive = new DatagramSocket(8080);// 2.接收数据包// 因为是字节,所以就先弄一个字节数组来接收数据byte[] str = new byte[1024];// 创建接收的DatagramPacket包// 空号里的两个值是// 1. 存放到哪个字节数组// 2. 存放的长度DatagramPacket data = new DatagramPacket(str, str.length);try {// 接收数据receive.receive(data);} catch (IOException e) {throw new RuntimeException(e);}// 3. 解析数据包// getData()返回发送来的数据byte[] data1 = data.getData();// 返回发送端的端口号int port = data.getPort();// 返回发送端的地址InetAddress address = data.getAddress();// 返回数据的长度int len = data.getLength();System.out.println("地址和端口为:" + address + "  " + port);System.out.println("接收的数据为" + new String(data1, 0, len) +"   " + "长度为:" + len);// 4. 释放资源receive.close();}

先自己实现一遍这个代码,再往后看😊

2. TCP的网络编程实现

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象
在开始通信之前,要保证连接已经建立
通过Socket产生的IO流来进行网络通信

1.1. 客户端

步骤

  1. 建立IP和端口的连接
    这里要提供服务端的IP和端口
  2. 获取输出流
    要通过 创建的socket的对象
    内部的getOutputStream()输出流函数
    通过write写数据
  3. 关闭socket
     
// 1.建立IP和端口的连接
Socket socket = new Socket("127.0.0.1", 8080);//2.获取输出流
OutputStream out = socket.getOutputStream();
//写数据out.write("Hillo!!!".getBytes());//3.关闭
out.close();

1.2. 服务端

步骤

  1. 创建ServerSocket对象
  2. 同意接受 ,监听客户端的连接
  3. 从连接同道中获取输入流读取对象
  4. 释放
//1.创建ServerSocket对象
ServerSocket server = new ServerSocket(8080);//2.同意接受 ,监听客户端的连接
Socket socket = server.accept();//3.从连接通道中获取输入流读取对象
InputStream input = socket.getInputStream();
int b;
while((b = input.read()) != -1){System.out.print((char)b);
}//4.释放
socket.close();
server.close();
1.2.1. 乱码问题

这是最简洁的代码,如果是中文,可能会出现乱码
那么,现在来改进一下代码

在第三步的位置,把接受的代码改成

InputStream input = socket.getInputStream();
InputStreamReader ins = new InputStreamReader(input);
BufferedReader buffer = new BufferedReader(ins);// 写成一行
BufferedReader buffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));

总结

到现在为止,简单的TCP 和 UDP 的发送端和接收端就可以实现了

还有进阶的,是放在练习里,在不久之后会更新

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词