Java基础学习(17)网络编程

这篇具有很好参考价值的文章主要介绍了Java基础学习(17)网络编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、 网络编程

1.1 什么是网络编程

解释:

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

应用场景:即时通信、网游对战、金融证券、国际贸易、邮件、等等不管是什么场景,都是计算机跟计算机之间通过网络进行数据传输

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

1.2 常见的软件架构:

  • cs —>Client/Server
    Java基础学习(17)网络编程
  • bs: Browser/Server
    Java基础学习(17)网络编程
    BS架构的优缺点:
  • 不需要开发客户端,只需要页面+服务端
  • 用户不需要下载,打开浏览器就能使用
  • 如果应用过大,用户体验受到影响
    可能会导致游戏加载不出来

CS架构的优缺点:

  • 画面可以做的非常精美,用户体验好
  • 需要开发客户端,也需要开发服务端
  • 用户需要下载和更新的时候太麻烦

CS:适合定制专业化的办公类软件如: IDEA、网游
BS:适合移动互联网应用,可以在任何地方随时访问的系统

1.3 网络编程的三要素

IP

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

端口号

  • 应用程序在设备中唯一的标识。

协议

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

1.4 IP

全称:Internet Protocol,是互联网协议地址,也称IP地址是分配给上网设备的数字标签

”说人话:“
上网设备在网络中的地址,是唯一

IPv4

全称:Internet Protocolversion 4,互联网通信协议第四版。采用32位地址长度,分成4组
Java基础学习(17)网络编程

由于太少IP值,现在又出现了IPv6

IPv6

  • 全称:Internet Protocol version6 ,互联网通信协议第六版
  • 由于互联网的蓬勃发展,IP地址的需求量愈来愈大,而IPv4的模式下IP的总数是有限的,采用128位地址长度,分成8组
    Java基础学习(17)网络编程

2.IPv4有什么特点
目前的主流方案最多只有2^32次方个ip,目前已经用完了
3.IPv6有什么特点
为了解决IPv4不够用而出现的最多有2^128次方个ip可以为地球上的每一粒沙子都设定ip

lPv4的地址分类形式

  • 公网地址(万维网使用)和私有地址(局域网使用)。
  • 192.168.开头的就是私有址址,范围即为192.168.0.0–192.168.255.255,专门为组织机构内部使用,以此节省IP

特殊IP地址

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

常用的CMD命令
ipconfig: 查看本机IP地址
ping:检查网络是否连通

1.4.1 InetAddress用法

用法 使用说明
static InetAddress getByName(String host) 确定主机名称的IP地址。主机名称可以是机器名称,也可以是IP地址
String getHostName() 获取此IP地址的主机名
String getHostAddress() 返回文本显示中的IP地址字符串
package Mysocketnet.MyInetAddressDom;

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

public class Dom1 {
    public static void main(String[] args) throws UnknownHostException {
        //获取到InetAddress对象
        InetAddress address = InetAddress.getByName("lzqxiaojiaoqi");
        System.out.println(address);

        //获取电脑名字
        String hostName = address.getHostName();
        System.out.println(hostName);//lzqxiaojiaoqi

        //获取IP地址
        String ip = address.getHostAddress();
        System.out.println(ip);//10.200.27.49
    }
}

1.5 端口号

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

  • 由两个字节表示的整数,取值范围:0~ 65535
  • 其中0~1023之间的端口号用于一些知名的网络服务或者应用
  • 我们自己使用1024以上的端口号就可以了

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

Java基础学习(17)网络编程

1.6 协议

TCP/IP 模型:
Java基础学习(17)网络编程

1.6.1 UDP协议

特点:

  • 用户数据报协议(User Datagram Protocol)
  • UDP是面向无连接通信协议。
    速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据

由于会缺失数据,传输快,主要应用于语音通话、看视频、网络会议等等

UDP通信程序(发送数据):

  1. 找快递公司 ----> 创建发送端的DatagramSocket对象

  2. 打包礼物 ----> 数据打包(DatagramPacket)

  3. 快递公司发送包裹 ----> 发送数据

  4. 付钱走人 ----> 释放资源

package Mysocketnet.MyUDP;

import java.io.IOException;
import java.net.*;

public class SendMessageDom {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket(快递公司)
        DatagramSocket ds = new DatagramSocket();

        //打包数据(DatagramPacket)
        //首先创建需要传输的数据,变成byte[]传输
        String str = "Hello World !!";
        byte[] bytes = str.getBytes();
        int port = 10086;
        InetAddress address = InetAddress.getByName("127.0.0.1");
        //参数:1. 需要传输的数据byte[],2.截取的长度,3. id值,4. 端口
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, port);

        //发送数据(包裹)
        ds.send(packet);

    //清理资源
        ds.close();
    }
}

UDP通信程序(接收数据):

  1. 找快递公司 -----> 创建接收端的DatagramSocket对象
  2. 接收箱子 -----> 接收打包好的数据
  3. 从箱子里面获取礼物 -----> 解析数据包
  4. 签收走人 -----> 释放资源
package Mysocketnet.MyUDP;

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

public class ReceiveMessageDom {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket
        //注意:要传输端口号码,而且传输的端口号码,要与传输端一致,要不然接受不到数据
        DatagramSocket ds = new DatagramSocket(10086);

        //接收数据,创建DatagramPacket空的数组对象接受传来的数据
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
        ds.receive(dp);

        //把数据拿出来
        InetAddress address = dp.getAddress();
        byte[] data = dp.getData();
        int length = dp.getLength();
        int port = dp.getPort();
        System.out.println("是"+address+"该IP通过"+port+"端口号,发过来的"+new String(data,0,length));

        //关闭窗口
        ds.close();
    }
}

dp.receive:需要等到接收到数据过后才进行下面代码的实现

练习:
Java基础学习(17)网络编程
发送:

package Mysocketnet.MyUDP.Exercise;

import javax.sound.sampled.Port;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;

//创建一个聊天室
//输入是键盘输入,直到输入的是886的时候才停止。
public class Send {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket(快递公司)
        DatagramSocket ds = new DatagramSocket();

        //打包数据
        //首先通过键盘输入数据,在集训打包
        Scanner sc = new Scanner(System.in);
        InetAddress address = InetAddress.getByName("127.0.0.1");
        //端口号
        int port = 10086;
        while (true){
            //键盘录入数据,请将数据传输为byte[]类型
            System.out.println("请输入数据");
            String str = sc.nextLine();
            byte[] bytes = str.getBytes();
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
            //发送
            ds.send(dp);
            System.out.println("发送成功");
            if (str.equals("886")){
                System.out.println("聊天结束");
                break;
            }
        }
        //关闭
        ds.close();
    }
}

接收:

package Mysocketnet.MyUDP.Exercise;

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

//创建一个聊天室
//接收数据,一直接收数据,采用死循环
public class Receive {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket(接收数据的端口号)
        DatagramSocket ds = new DatagramSocket(10086);

        //一直接收数据
        //创建空包裹来接受数据
        byte[] bytes = new byte[1024];
        while (true){
            //创建DatagramPacket
            DatagramPacket dp = new DatagramPacket(bytes, 0, bytes.length);

            //接收数据
            ds.receive(dp);
            System.out.println(new String(dp.getData())+"-------"+dp.getAddress());
        }

    }
}

1.6.1.1 UDP的三种通信方式
  • 单播: 单个发送数据
    以前的代码就是单播
  • 组播: 发送一小部分数据
    组播地址: 224.0.0.0 ~ 239.255.255.255
    其中224.0.0.0 ~ 224.0.0.255 为预留的组播地址
  • 广播: 全部数据发送
    广播地址: 255.255.255.255

组播与上方代码不相同的地方是:

//创建MulticastSocket对象
MulticastSocket ms = new MulticastSocket()

//接收的地址改为
InetAddress address = InetAddress.getByName("224.0.0.1");

1.6.2 TCP协议

  • 传输控制协议TCP(Transmission Control Protocol)
  • TCP协议是面向连接的通信协议。
    速度慢,没有大小限制,数据安全

由于传输数据相对较慢,但是传输时不会丢失数据,主要应用于:文字聊天,发送邮件

TCP通信程序

  • TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象
  • 通信之前要保证连接已经建立
  • 通过Socket产生IO流来进行网络通信
    Java基础学习(17)网络编程

客户端(Socket):

  1. 创建客户端的Socket对象(Socket)与指定服务端连接
    Socket(string host, int port)
  2. 获取输出流,写数据
    Outputstream getOutputstream()
  3. 释放资源
    void close()
package Mysocketnet.MyTCP;

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

//用TCP来创建监听窗口(发送数据)
public class client {
    public static void main(String[] args) throws IOException {
        //创建Socket对象
        Socket socket = new Socket("127.0.0.1", 10086);

        //创建连接通道
        OutputStream os = socket.getOutputStream();
        os.write("男孩女孩".getBytes());

        //清理资源
        os.close();
        socket.close();
    }
}

服务端:

  1. . 创建服务器端的Socket对象(ServerSocket)
    ServerSocket(int port)
  2. 监听客户端连接,返回一个Socket对象
    Socket accept()
    3 . 获取输入流,读数据,并把数据显示在控制台
    Inputstream getInputstream()
  3. 释放资源
    void close()
package Mysocketnet.MyTCP;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

//利用TCP来创建服务器端口(接收数据)
public class service {
    public static void main(String[] args) throws IOException {
    //创建Socket对象
        ServerSocket ss = new ServerSocket(10086);

        //创建接收数据
        Socket accept = ss.accept();

        //连接通道获取其传输的值
//        InputStream is = accept.getInputStream();
        //因为在这里创建的是字节流是一个字节一个字节的读取就会导致乱码
        //所有通过这里的转换流转成字符流
        BufferedReader br = new BufferedReader(new InputStreamReader(accept.getInputStream()));
        int b;
        while ((b = br.read()) != -1){
            System.out.println((char) b);
        }

        //清理资源
        accept.close();
        ss.close();
    }
}

注意事项:

  1. 我们在利用客户端传输数据的时候必须要保证连接正常,要么就会报错
  2. 我们在创建的服务端,在读取数据的时候,可以利用转换流字节流转换为字符流,不仅提高了效率,还防止了乱码
1.6.2.1 TCP底层原理

Java基础学习(17)网络编程

三次握手:

确保链接

Java基础学习(17)网络编程

四次挥手:

确保连接断开,并且使得数据处理完全

Java基础学习(17)网络编程
个人理解:(可能不恰当,适当理解)

相当于就是先跟服务器说我要执行某个任务在服务器上,然后服务器同意后给与消息返回,但是要等到服务器手上的事情做完才能够发送同意消息,等到客户端拿到消息的时候,以为不成功,骗他的,再次向服务器确认信息后才安心的去执行任务文章来源地址https://www.toymoban.com/news/detail-450119.html

到了这里,关于Java基础学习(17)网络编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机网络技术与JAVA网络编程UDP编程-----JAVA入门基础教程-----计算机网络经典

    import org.junit.jupiter.api.Test; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.*; public class UDP { public static void main(String[] args) { DatagramSocket datagramSocket = null; try { datagramSocket = new DatagramSocket(); InetAddress inetAddress = InetAddress.getByName(\\\"127.0.0.1\\\"); int port = 9090; byte[] byte

    2024年02月15日
    浏览(25)
  • 计算机网络技术与JAVA网络编程URL编程-----JAVA入门基础教程-----计算机网络经典

    import org.junit.jupiter.api.Test; import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class URLTest { public static void main(String[] args) { //URL:统一资源定位符(种子),一个URL就定位着互联网上某个资源的地址 //http:应用层协议,IP地址,端口号,资源地址,参数

    2024年02月15日
    浏览(23)
  • Java基础面试题04(网络编程)

    什么是网络编程?它的作用是什么? 网络编程是一种用于在计算机网络中进行数据交换和通信的编程技术。它涉及到使用网络协议和相关工具来实现程序之间的通信。网络编程的目标是允许不同设备或应用程序之间进行数据传输、共享资源和进行远程控制。 网络编程的作用

    2024年02月15日
    浏览(20)
  • 快速入门java网络编程基础------Nio

    哔哩哔哩黑马程序员 netty实战视频 NIO(New I/O)是Java中提供的一种基于通道和缓冲区的I/O(Input/Output)模型。它是相对于传统的IO(InputStream和OutputStream)模型而言的新型I/O模型。NIO的主要特点包括: 1.通道与缓冲区: 2.NIO引入了通道(Channel)和缓冲区(Buffer)的概念。通道

    2024年01月20日
    浏览(26)
  • 《Java SE》网络编程基础知识归纳。

    目录 一、网络基本介绍 1、什么是网络通信? 2、网络 3、IP地址 4、域名 5、网络通信协议 6、Socket 二、TCP网络通信编程  1、应用实例1(字节流) 2、应用实例2(字节流) 3、应用实例3(字符流) 4、netstat 指令 三、UDP网络通信编程  1、基本介绍 2、基本流程 3、应用实例  

    2024年01月20日
    浏览(29)
  • 什么是网络编程?Java如何实现?三次握手和四次挥手?

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 网络编程 : 网络编程,就是指在网络通信协议下,不同计算机运行的程序,进行的数据传输,即:计算机与

    2024年02月08日
    浏览(17)
  • 【Java学习笔记】 68 - 网络——TCP编程、UDP编程

    https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter21/src 目录 项目代码 网络 一、网络相关概念 1.网络通讯 2.网络 3.IP地址 4.域名 5.端口号 6.网络通讯协议 TCP协议:传输控制协议 UDP协议: 二、InetAddress类 1.相关方法 三、Socket 1.基本介绍 2.TCP网络通信编程 基本介绍 应用案例

    2024年02月04日
    浏览(25)
  • Java学习笔记37——网络编程01

    计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 网络编程 在网络通信协议下,实现网络互连的不同计算机上运行的

    2024年02月07日
    浏览(27)
  • Java网络编程基础:TCP Socket套接字编程 IntAddress UDP等...

    目录 一,网络基础 1.IP地址 2.端口 3.TCP/UDP协议 4.网络编程开发模式  二,基于套接字的Java网络编程 1.Socket  2.InetAddress 三.基于TCP的Socket网络编程 1.单服务器端与单Socket客户端一次通讯 2.单服务器端接收多次通讯  3.TCP网络通讯补充 四,基于UDP的网络编程 1. DatagramSocket:收发

    2024年04月29日
    浏览(18)
  • day17-网络编程(上)

    你必须了解的网络相关设备和基础概念。 假设 alex 上了一个野鸡大学买了一台电脑,电脑里存了1部小电影,整宿整宿的在宿舍反复的看。 alex 如何想要和室友 于超 进行收发数据,可以通过一根网线来进行连接,并进行数据的传输。 1.1.1 交换机 其他2位室友如何也想和他们的

    2024年04月22日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包