java学习笔记——网络编程

本文介绍了网络编程的基础知识,包括网络编程三要素:IP、端口号和协议。详细讲解了TCP和UDP两种主要协议的区别,如TCP的三次握手和四次挥手过程,以及UDP的无连接特性和三种通信方式。此外,还提到了IPv4和IPv6的特点,以及解决IPv4地址不足的方法。
摘要由CSDN通过智能技术生成

目录

知识点

1.什么是网络编程

2.常见软件架构有哪些

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

4.网络编程三要素分别是什么

5.网络编程三要素分别表示什么

6.IPv4有什么特点

7.IPv6有什么特点

8.现在如何解决IPv4不够的问题

9.特殊的IP是什么

10.常见的两个CMD命令

11.UDP协议

12.TCP协议

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

14.TCP通信程序(三次握手)

15.TCP通信程序(四次挥手)

代码实现

1.UDP单播

2.UDP组播

3.UDP广播

4.TCP


知识点

1.什么是网络编程

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

2.常见软件架构有哪些

        CS/BS

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

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

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

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

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

4.网络编程三要素分别是什么

        IP、端口号、协议

5.网络编程三要素分别表示什么

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

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

        协议:数据在网络中传输的规则,常见的协议有UDP、TCP、http、https、ftp

6.IPv4有什么特点

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

7.IPv6有什么特点

        为了解决IPv4不够用而出现的,最多有2^128次方个ip,可以为地球上的每一粒沙子都设定ip

8.现在如何解决IPv4不够的问题

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

9.特殊的IP是什么

        127.0.0.1(永远表示本机)

10.常见的两个CMD命令

        ipconfig:查看本机IP地址

        ping:检查网络是否连通

11.UDP协议

        用户数据报协议(User Datagram Protocol)

        UDP是面向无连接通信协议

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

12.TCP协议

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

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

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

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

        单播:点对点传输

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

        广播:广播地址255.255.255.255

14.TCP通信程序(三次握手)

        客户端向服务器发出连接请求、服务器向客户端返回响应、客户端向服务器再次发出确认信息

15.TCP通信程序(四次挥手)

        客户端向服务器发出取消连接请求、服务器向客户端返回一个响应、服务器向客户端发出确认取消信息、客户端再次发送确认信息

代码实现

1.UDP单播
import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class SendMessageDemo {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket对象
        DatagramSocket ds=new DatagramSocket();

        while (true) {
            //打包数据
            Scanner sc=new Scanner(System.in);
            String str=sc.nextLine();//输入数据
            if(str.equals("886"))break;//终止发送
            byte[] bytes=str.getBytes();
            InetAddress address=InetAddress.getByName("127.0.0.1");
            int port=10000;
            DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);

            //发送数据
            ds.send(dp);
        }

        //释放资源
        ds.close();
    }
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class ReceiveMessageDemo {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket对象
        DatagramSocket ds = new DatagramSocket(10000);

        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

        while (true) {
            //接受数据包
            ds.receive(dp);

            //解析数据包
            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));
        }
    }
}
2.UDP组播
import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class SendMessageDemo {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket对象
        MulticastSocket ms=new MulticastSocket();

        while (true) {
            //打包数据
            Scanner sc=new Scanner(System.in);
            String str=sc.nextLine();//输入数据
            if(str.equals("886"))break;//终止发送
            byte[] bytes=str.getBytes();
            InetAddress address=InetAddress.getByName("224.0.0.1");
            int port=10000;
            DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);

            //发送数据
            ms.send(dp);
        }

        //释放资源
        ms.close();
    }
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class ReceiveMessageDemo1 {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket对象
        MulticastSocket ms = new MulticastSocket(10000);

        //将本机添加到224.0.0.1组中
        InetAddress address=InetAddress.getByName("224.0.0.1");
        ms.joinGroup(address);

        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

        while (true) {
            //接收数据包
            ms.receive(dp);

            //解析数据包
            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));
        }
    }
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class ReceiveMessageDemo2 {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket对象
        MulticastSocket ms = new MulticastSocket(10000);

        //将本机添加到224.0.0.1组中
        InetAddress address=InetAddress.getByName("224.0.0.1");
        ms.joinGroup(address);

        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

        while (true) {
            //接收数据包
            ms.receive(dp);

            //解析数据包
            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));
        }
    }
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class ReceiveMessageDemo3 {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket对象
        MulticastSocket ms = new MulticastSocket(10000);

        //将本机添加到224.0.0.1组中
        InetAddress address=InetAddress.getByName("224.0.0.1");
        ms.joinGroup(address);

        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

        while (true) {
            //接收数据包
            ms.receive(dp);

            //解析数据包
            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));
        }
    }
}
3.UDP广播
import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class SendMessageDemo {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket对象
        DatagramSocket ds=new DatagramSocket();

        while (true) {
            //打包数据
            Scanner sc=new Scanner(System.in);
            String str=sc.nextLine();//输入数据
            if(str.equals("886"))break;//终止发送
            byte[] bytes=str.getBytes();
            InetAddress address=InetAddress.getByName("255.255.255.255");
            int port=10000;
            DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);

            //发送数据
            ds.send(dp);
        }

        //释放资源
        ds.close();
    }
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class ReceiveMessageDemo {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket对象
        DatagramSocket ds = new DatagramSocket(10000);

        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

        while (true) {
            //接受数据包
            ds.receive(dp);

            //解析数据包
            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));
        }
    }
}
4.TCP
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        //创建ServerSocket对象
        ServerSocket ss=new ServerSocket(10000);

        //监听客户端连接
        Socket socket=ss.accept();

        //中连接通道中获取输入流读取数据
        InputStream is=socket.getInputStream();
        InputStreamReader isr=new InputStreamReader(is);
        BufferedReader br=new BufferedReader(isr);
        int b;
        while ((b=br.read())!=-1){
            System.out.print((char)b);
        }

        //释放资源
        is.close();
        socket.close();
    }
}
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException {
        //创建Socket对象
        Socket socket=new Socket("127.0.0.1",10000);

        //可以从连接通道获取输出流
        OutputStream os=socket.getOutputStream();

        //写出数据
        os.write("你好".getBytes());

        //释放资源
        os.close();
        socket.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值