网络编程

目录

一、基础介绍

二、网络编程三要素

1、IP

2、端口号

3、协议

(1)UDP协议

(2)TCP协议


一、基础介绍

网络编程,就是在网络通信协议下,不同计算机上运行的程序,进行的数据传播。

Java中可以使用java,net包下的技术轻松开发出常见的网络应用程序。

常见网络架构:

CS:Client/Server,客户端/服务器,需要本地下载并安装客户端程序,在远程有一个服务端程序。

优点:画面可以做的非常精美,用户体验好。

缺点:需要开发客户端,服务端,用户需要下载和更新的时候太麻烦。

适合:定制专业化的办公软件,如IDEA、网游等。

BS:Browser/Server,浏览器/服务器,只需要一个浏览器,用户通过不同的网址,访问不同的服务器。

优点:不需要开发客户端,只需要页面+服务端用户不需要下载打开浏览器就能使用。

缺点如果应用过大,用户体验受到影响。

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

二、网络编程三要素

IP:上网设备在网络中的地址,是唯一的标识。(确定对方电脑在互联网上的IP)

端口号:应用程序在设备中唯一的标识。(对方电脑接收数据的软件)

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

1、IP

全称Internet Protocol是互联网协议地址,也称IP地址。

是分配给上网设备的数字标签。

通俗理解:上网设备在网络中的地址,是唯一的标识。

常见IP分为:IPv4、IPv6

IPv4

全称Internet Protocol version4,互联网通信协议第四版。

采用32位地址长度,分成4组:

IPv4的地址分类:公网地址(万维网使用)和私有地址(局域网使用)。

192.168.开头的就是私有址址,范围即为192.168.0.0--192.168.255.255, 专门为组织机构内部使用,以此节省IP

特殊IP:127.0.0.1也可以是localhost是回送地址也称本地回环地址也称本机IP永远只会寻找当前所在本机。

我们电脑换个网,局域网可能不一样,但是本地回环地址是不变的。

常用CMD命令:

ipconfig:查看本机IP地址。

ping:检查网络是否联通。

IPv6

全称Internet Protocol version 6,互联网通信协议第六版。

由于互联网的蓬勃发展,IP地址的需求量愈来愈大,而IPv4的模式下IP的总数是有限的。

采用128位地址长度,分成8组。

InetAddress类

Java中用来标识IP的类,这个类的对象,就表示IP的对象,两个子类一个表示IPv4,一个表示IPv6

import java.net.InetAddress;
import java.net.UnknownHostException;

public class Main {
    public static void main(String[] args) throws UnknownHostException {

        // 获取InetAddress的对象,参数可以是机器名,也可以是IP地址
        // 这个对象是IP的对象,也就是电脑的对象
        InetAddress address = InetAddress.getByName("DESKTOP-USMHHRP");
        System.out.println(address);  // DESKTOP-USMHHRP/10.22.240.165

        // 获取此IP的主机名
        String name = address.getHostName();
        System.out.println(name);  // DESKTOP-USMHHRP

        // 获取电脑IP
        String ip = address.getHostAddress();
        System.out.println(ip);  // 10.22.240.165
        
    }
}

2、端口号

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

端口号由两个字节表示的整数,取值范围0~65535

其中0~1023之间的端口号用于些知名的网络服务或者应用。我们自己使用1024以.上的端口号就可以了。

注意:一个端口号只能被个应用程序使用。

3、协议

计算机网络中,连接和通信的规则被称为网络通信协议。

OSI参考模型世界互联协议标准,全球通信规范,单模型过于理想化,未能在因特网上进行广泛推广

TCP/IP参考模型(或TCP/IP协议)事实上的国际标准。

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

  • UD是面向无连接通信协议(数据直接发,不检查对面电脑网络是否畅通)
  • 速度快有大小限制一次最多发送64K数据不安全,易丢失数据。
  • 常用于在线视频、语音通话等。

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

  • TCP协议是面向连接的通信协议。
  • 速度慢,没有大小限制,数据安全。
  • 常用于软件下载,文字聊天,发送邮件等。

(1)UDP协议

UDP发送数据:

我们寄东西,要:找快递公司、打包东西、发送包裹、付钱走人

这就对应着UDP发送数据的四个步骤:

  1. 创建发送端的DatagramSocket对象(快递公司)
  2. 创建打包好的数据对象DatagramPacket(打包东西)
  3. 发送数据(发送包裹)
  4. 释放资源(付钱走人)
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Main {
    public static void main(String[] args) throws IOException {

        // 1.创建发送端的DatagramSocket对象(快递公司)
        // 创建后,这个对象会绑定一个端口,之后我们就是通过这个端口向外发送数据的,如果创建对象的时候是空参的,会随机一个,如果有参,就是我们指定的那个
        DatagramSocket ds = new DatagramSocket();

        // 2.创建打包好的数据对象
        // 要发送的信息(需要转成字节数组)
        String str = "吉娃娃!";
        byte[] bytes = str.getBytes();

        // 要往哪台电脑发(ip/电脑对象)
        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();
    }
}

UDP接受数据:

我们收东西,要:找快递公司、接收包裹、拆开包裹、签收走人

这就对应着UDP接收数据的四个步骤:

  1. 创建接收端的DatagramSocket对象(找快递公司)
  2. 创建接收数据包的对象(接收包裹
  3. 解析数据包(拆开包裹)
  4. 释放资源(签收走人)

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Main {
    public static void main(String[] args) throws IOException {
        // 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,len));
        System.out.println("该数据是从"+address+"这台电脑中的"+port+"端口发出的");

        // 4.释放资源(签收走人)
        ds.close();
    }
}

UDP三种通信方式:

① 单播

以前的代码就是单播

② 组播

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

如果我们自己想用只能用预留组播地址。

之前的ip只能表示一台电脑,而随便一个组播地址都表示一组电脑。

③ 广播

广播地址: 255.255.255.255

局域网中所有人都能收到。

(2)TCP协议

TCP通信协议是一种可靠的网络协议它在通信的两端各建立- -个Socket对象

通信之前要保证连接已经建立。

通过Socket产生IO流来进行网络通信。

发送数据:

  1. 创建客户端的Socket对象与指定服务端连接
  2. 获取输出流,写出数据
  3. 释放资源

客户端:负责发送数据

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Main {
    public static void main(String[] args) throws IOException {
        // 1、创建客户端的Socket对象与指定服务端连接
        // 两个参数:服务器的ip和端口,在创建对象的同时会链接服务端,如果连不上会报错,所以在运行代码的时候要先运行服务端,不然这里连不上就会报错
        Socket socket = new Socket("127.0.0.1",10000);

        // 2、从连接通道中获取输出流,写出数据
        OutputStream os = socket.getOutputStream();
        // 注意字节流往外写数据的时候,只能写字节信息
        os.write("hello!chiwawa!".getBytes());

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

接收数据:

  1. 创建服务器端的ServerSocket对象
  2. 监听客户端链接,返回一个Socket对象
  3. 获取输入流,读取数据,并把数据显示在控制台
  4. 释放资源

服务端:负责接收数据

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class test {
    public static void main(String[] args) throws IOException {
        // 1、创建服务器端的ServerSocket对象
        // 传入端口,这个端口要跟客户端连接的端口保持一致
        ServerSocket ss = new ServerSocket(10000);

        // 2、监听客户端的连接,就是创建一个方法死等客户端的连接,连不上就卡在这,连上了才会返回客户端的连接对象Socket
        Socket socket = ss.accept();

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

        // 4、释放资源
        // 断开跟客户端之间的连接
        socket.close();

        // 关闭服务器
        ss.close();
    }
}


上面的要注意,使用字节流会出现中文乱码,可以使用转换流把字节流转成字符流:

TCP中的三次握手、四次挥手

三次握手:

四次挥手:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值