JAVASE:网络编程

什么是网络编程?

1:什么网络编程?

计算机跟计算机之间通过网络进行数据传输。

2.常见软件架构有哪些?

CS/BS

3.通信的软件架构CS\BS的各有什么区别和优缺点

CS:客户端服务端模式需要开发客户端

BS:浏览器服务端模式不需要开发客户端。

CS:适合定制专业化的办公类软件如:IDEA、网游

BS:适合移动互联网应用,可以在任何地方随时访问的系统。

高级软件人才培训专家

网络编程三要素

IP:设备在网络中的地址,是唯一的标识。
端口号:应用程序在设备中唯一的标识,
协议:数据在网络中传输的规则,常见的协议有UDP、TCP、http、https、ftp。
IP

1.lP的作用

设备在网络中的地址,是唯一的标识

2.IPv4有什么特点?

目前的主流方案

最多只有2^32次方个ip,目前已经用完了

3.IPv6有什么特点?

为了解决IPv4不够用而出现的

最多有2^128次方个ip

可以为地球上的每一粒沙子都设定ip
IPV4小细节

1.现在如何解决IPV4不够的问题?

利用局域网IP解决IP不够的问题

2.特殊的IP是什么?

127.0.0.1(永远表示本机)

3.常见的两个CMD命令?

ipconfig:查看本机IP地址

ping:检查网络是否连通
InetAddress类的使用

方法 说 明
static InetAddress getByName(String host) 确定主机名称的IP地址。主机名称可以是机器名称,也可以是IP地址
String getHostName() 获取此IP地址的主机名
String getHostAddress() 返回文本显示中的IP地址字符串
java 复制代码
//1.获取InetAddress的对象
//IP的对象一台电脑的对象
InetAddress address = InetAddress.getByName("DESKTTOP-50JJSAM")
System.out.println(address);
String name = address.getHostName
System.out.println(name);//DESKTOP-50JJSAM
String ip = address.getHostAddress();
System.out.println(ip);//192.168.1.100

端口号

  1. 应用程序在设备中唯一的标识。
  2. 端口号:由两个字节表示的整数,取值范围:0~65535 其中0~1023之间的端口号用于一些知名的网络服务或者应月用。
    我们自己使用1024以上的端口号就可以了。
  3. 注意:一个端口号只能被一个应用程序使用。

协议

  1. UDP协议

用户数据报协议(UserDatagram Protocol)

UDP是面向无连接通信协议。

速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据

  1. TCP协议

传输控制协议TCP(Transmission Control Protocol)

TCP协议是面向连接的通信协议。

速度慢,没有大小限制,数据安全。

UDP通信程序

发送数据

java 复制代码
//1.创建DatagramSocket对象(快递公司)
//细节:
//绑定端口,以后我们就是通过这个端口往外发送
//空参:所有可用的端口中随机一个进行使用
//有参:指定端口号进行绑定
DatagramSocket ds = new DatagramSocket();
//2.打包数据
Stringstr="你好威啊!!!";
byte[] bytes = str.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
int port = 10086;
DatagramPacket dp = new DatagramPacket(bytes,bytes.length,address,port);
//3.发送数据
ds.send(dp);
//4.释放资源
ds.close();

接收数据

java 复制代码
//1.创建DatagramSocket对象(快递公司)
//细节:
//在接收的时候,一定要绑定端口
//而且绑定的端口一定要跟发送的端口保持一致
DatagramSocket ds = new DatagramSocket(10086);
//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,1en));
System.out.println("该数据是从"+address+"这台合电脑中的"+port+"这个端口发出的");
//4.释放资源
ds.close();

UDP的三种通信方式(代码实现)

1.单播

以前的代码就是单播

2.组播

组播地址:224.0.0.0 ~ 239.255.255.255

其中224.0.0.0~224.0.0.255为预留的组播地址

3.广播

广播地址:255.255.255.255
组播发送端代码

java 复制代码
MulticastSocket ms = new MulticastSocket();
//创建DatagramPacket对象
String s = "你好,你好!";
byte[] bytes = s.getBytes();
InetAddress address = InetAddress.getByName("224.0.0.1");
int port = 10000;
DatagramPacket dp= new DatagramPacket(bytes, bytes.length, address, port);
//调用MulticastSocket发送数据方法发送数据
ms.send(dp);
//释放资源
ms.close();

组播接收端代码

java 复制代码
 public static void main(String[] args) throws IOException {
        //1.创建MulticastSocket对象
        MulticastSocket ms = new MulticastSocket(10000);
        //2.将将当前本机,添加到224.0.0.1的这一组当中
        InetAddress address = InetAddress.getByName("224.0.0.1");
        ms.joinGroup(address);
        //3.创建DatagramPacket数据包对象
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
        //4.接收数据
        ms.receive(dp);
        //5.解析数据
        byte[] data = dp.getData();
        int len = dp.getLength();
        String ip = dp.getAddress().getHostAddress();
        String name = dp.getAddress().getHostName();
        System.out.println("ip为:"+ip+",主机名为:"+name+"的人,发送了数据:"+new String(data,0,len));
    }

广播发送端代码

单播这段改了就是

java 复制代码
InetAddress address = InetAddress.getByName("255.255.255.255");

TCP通信程序

发送端

1.创建客户端的Socket对象(Socket)与指定服务端连接

Socket(String host, int port)

2.获取输出流,写数据

OutputStream getOutputStream()

3.释放资源

void close()

java 复制代码
public static void main(String[] args) throws IOException {
        //TCP协议,发送数据
        //1.创建Socket对象
        //细节:在创建对象的同时会连接服务端
        //如果连接不上,代码会报错
        Socket socket = new Socket("127.0.0.1", 10000);
        //2.可以从连接通道中获取输出流
        OutputStream os = socket.getOutputStream();
        //写出数据
        os.write("你好".getBytes());
        //3.释放资源
        os.close();
        socket.close();
    }

接收端

1.创建服务器端的Socket对象(ServerSocket)

ServerSocket(int port)

2.监听客户端连接,返回一个Socket对象

Socket accept()

3.获取输入流,读数据,并把数据显示在控制台

InputStream getInputStream()

4.释放资源

void close()

java 复制代码
public static void main(String[] args) throws IOException {
        //TCP协议,接收数据
        //1.创建对象ServerSocker
        ServerSocket ss = new ServerSocket(10000);
        //2.监听客户端的链接
        Socket socket = ss.accept();
        //3.从连接通道中获取输入流读取数据
        //InputStream is = socket.getInputStream();
        BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        int b;
        while ((b = br.read()) != -1) {
            System.out.print((char) b);
        }
    }

三次握手四次挥手

相关推荐
love530love4 分钟前
【笔记】在 MSYS2(MINGW64)中正确安装 Rust
运维·开发语言·人工智能·windows·笔记·python·rust
Mr Aokey39 分钟前
Spring MVC参数绑定终极手册:单&多参/对象/集合/JSON/文件上传精讲
java·后端·spring
slandarer1 小时前
MATLAB | 绘图复刻(十九)| 轻松拿捏 Nature Communications 绘图
开发语言·matlab
狐凄1 小时前
Python实例题:Python计算二元二次方程组
开发语言·python
小马爱记录1 小时前
sentinel规则持久化
java·spring cloud·sentinel
roman_日积跬步-终至千里1 小时前
【Go语言基础【3】】变量、常量、值类型与引用类型
开发语言·算法·golang
roman_日积跬步-终至千里1 小时前
【Go语言基础】基本语法
开发语言·golang·xcode
Felven2 小时前
C. Basketball Exercise
c语言·开发语言
长勺2 小时前
Spring中@Primary注解的作用与使用
java·后端·spring
海棠蚀omo2 小时前
C++笔记-C++11(一)
开发语言·c++·笔记