首页 > 编程语言 >Java 网络编程

Java 网络编程

时间:2023-08-18 14:32:51浏览次数:45  
标签:Java close java 编程 网络 System new println import

网络编程

1.概述

地球村:你在西安,你一个美国的朋友!

信件:

Java 网络编程_java

计算机网络

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

网络编程的目的:无线电台....传播交流信息,数据交换。通信

想要达到这个效果需要什么:1.如何准确的定位网络上一台主机 192.168.16.124:端口,定位到这个计算机上的某个资源。 2.找到了这个主机,如何传输数据呢?

javaweb:网页编程 B/S网络编程:TCP/IP C/S

2.网络通信的要素

如何实现网络的通信?

通信双方地址:

  • ip
  • 端口号

  • 192.168.16,124:6985
  • 规则:网络通信的协议
    TCP/IP参考模型
  • Java 网络编程_java_02

  • 小结:

1.网络编程中有两个主要的问题

  • 如何准确的定位到网络上的一台或者多台主机
  • 找到主机之后如何进行通信

2.网络编程中的要素

  • IP和端口号 IP
  • 网络通信协议 udp,tcp

3.万物皆对象

3.IP

ip地址:inetAddress

  • 唯一定位一台网络上计算机
  • 127.0.0.1:本机 localhost
  • ip地址分类1.IPV4/ipv6
  • IPV4127.0.0.1,4个字节组成,0~255,42亿;30亿都在北美,亚洲4亿,2011年就用尽了;
  • ipv6 cmd ipconfig命令就可以看到本地链接 IPv6 地址. . . . . . . . : ,128位,8个无符号整数!

.

2.公网(互联网)- 私网(局域网)

  • ABCD类地址
  • 192.168.xx.xx,专门给组织内部使用的. .

3.域名:记忆IP问题

代码演示

import java.net.InetAddress;
import java.net.UnknownHostException;
public class TextInetAddress {
    public static void main(String[] args) {
        try {
            //查询本地地址
            InetAddress inetAddress1 = InetAddress.getByName("127.0.0.1");
            System.out.println(inetAddress1);
            InetAddress inetAddress3 = InetAddress.getByName("localhost");
            System.out.println(inetAddress3);
            InetAddress inetAddress4 = InetAddress.getLocalHost();
            System.out.println(inetAddress4);

            //查询网站ip地址
            InetAddress inetAddress2= InetAddress.getByName("www.baidu.com");
            System.out.println(inetAddress2);

            //常用方法
            System.out.println(inetAddress2.getCanonicalHostName());//规范的名字
            System.out.println(inetAddress2.getHostAddress());//ip
            System.out.println(inetAddress2.getHostName());//域名,或自己的电脑名字

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }

    }
}

4.端口

端口表示计算机上的一个程序的进程

  • 不同的进程有不同的端口号!用来区分软件!
  • 被规定0~65535
  • TCP/UDP:65535 * 2 tcp:80 ,udp:80吗,单个协议下,端口号不能冲突
  • 端口分类1.公有端口0~1023
  • HTTP:80
  • HTTPS:443
  • FTP:21
  • Telent:23

2.程序注册端口:1024~49151,分配用户或者程序

  • Tomcat: 8080
  • MySQL: 3306
  • Oracle: 1521
  • ..............

3.动态、私有:49152~65535

  • cmd:命令
  • netstat -ano 查看所有端口
  • netstat -ano|findstr "5900" # 查看指定端口
  • tasklist|findstr "8696" # 查看指定端口的进程
import java.net.InetSocketAddress;
public class TestInetSocketAddress {
    public static void main(String[] args) {
        InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080);
        InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 8080);
        System.out.println(socketAddress);
        System.out.println(socketAddress2);
        System.out.println(socketAddress.getAddress());
        System.out.println(socketAddress.getHostName());
        System.out.println(socketAddress.getPort());
    }
}

5.通信协议

协议:约定,就好比我们现在说的话是普通话。

网络通信协议:速率,传输码率,代码结构,传输控制....

问题:非常复杂

大事化小:分层!

TCP/IP协议簇实际上是一组协议

重要:

  • TCP: 用户传输协议
  • UDP:用户数据报协议

出名的协议:

  • TCP: 用户传输协议
  • IP:网络互联协议 TCP UDP 对比

TCP:打电话

  • 链接,稳定
  • 三次握手,四次挥手三次握手: 最少三次,保证稳定链接! A:你愁啥? B:瞅你咋的? A:干一场! 四次握手: A:我要走了 B: 我真的要走了吗? B: 你真的真的要走了吗? A:我真的要走了
  • 客户端,服务端
  • 传输完成,释放链接,效率低

UDP:发短信

  • 不连接,不稳定
  • 客户端,服务端:没有明确的界限
  • 不管有没有准备好,都可以发给你
  • 炮弹
  • DDOS:洪水gongji!(饱和gongj)

6.TCP

客户端1.链接服务器Socket 2.发送消息

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
//客户端
public class TCPDemoLiaoTian1 {
    public static void main(String[] args) {
        Socket socket = null;
        OutputStream os = null;
        try {
            //要知道服务器的地址
            InetAddress serviceIP = InetAddress.getByName("127.0.0.1");
            //端口号
            int port = 9999;
            //创建一个Socket方法
            socket = new Socket(serviceIP,port);

            //发送消息IO流
             os = socket.getOutputStream();
             os.write("你好欢迎".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(os != null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(socket != null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

服务器1.建立服务的端口ServerSocket 2.等待用户的链接accept 3.接受用的消息

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class TCPServiceDemoLiaoTian1 {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket accept = null;
        InputStream is = null;
        ByteOutputStream baos = null;
        try {
            //我得有一个地址
           serverSocket = new ServerSocket(9999);
           while (true){
               //等待客户端链接过来
               accept = serverSocket.accept();
               //读取客户端的消息
               is = accept.getInputStream();
//            byte[] buffer = new byte[1024];
//            int len;
//            while ((len = is.read(buffer)) != -1){
//                String msg = new String(buffer, 0, len);
//                System.out.println(msg);
//            }
               //管道流
               baos = new ByteOutputStream();
               byte[] buffer = new byte[1024];
               int len;
               while ((len = is.read(buffer)) != -1){
                   baos.write(buffer,0,len);
               }
               System.out.println(baos.toString());
           }

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(baos != null){
                try {
                    baos.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if(is != null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(accept != null){
                try {
                    accept.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(serverSocket != null){
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

文件上传服务器端:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class TcpServiceDemo2 {
    public static void main(String[] args) throws IOException {
        //创建服务
        ServerSocket serverSocket =  new ServerSocket(9000);
        //监听客户端的链接
        Socket socket = serverSocket.accept();//阻塞试监听,会一直等待客户端链接
        //获取输入流
        InputStream is = socket.getInputStream();
        //文件输出
        FileOutputStream fos = new FileOutputStream(new File("receive.jpg"));
        byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer)) != -1){
            fos.write(buffer,0,len);
        }

        //通知客户端我接受完毕了
        OutputStream os = socket.getOutputStream();
        os.write("我接受完毕了,你可以断开了".getBytes());

        //关闭资源
        fos.close();
        is.close();
        socket.close();
        serverSocket.close();
    }
}

客户端:

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class TcpCilenDemo2 {
    public static void main(String[] args) throws IOException {
        //创建一个socket连接
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),90000);
        //创建一个输出流
        OutputStream os = socket.getOutputStream();
        //读取文件
        FileInputStream fis = new FileInputStream(new File("123.jpg"));
        //写出文件
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1){
            os.write(buffer,0,len);
        }
        //通知服务器,我已经结束
        socket.shutdownOutput();//我已经传输完了

        //确定服务器接受完毕,才能够断开连接
        InputStream inputStream = socket.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer2 = new byte[1024];
        int len2;
        while ((len2 = inputStream.read(buffer2)) != -1){
            baos.write(buffer,0,len2);
        }
        System.out.println(baos.toString());
        baos.close();
        inputStream.close();
        fis.close();
        os.close();
        socket.close();
    }
}

Tomcat服务端

  • 自定义S
  • Tomcat服务器S

客户端

  • 自定义C
  • 浏览器B

7.UDP

发短信:不用连接,需要知道对方的地址!

标签:Java,close,java,编程,网络,System,new,println,import
From: https://blog.51cto.com/u_16172365/7136003

相关文章

  • 网络工程师,你的钱途在哪里?
    下午好,我是老杨。转眼一年又过去了,就马上就到了秋招的时间节点。哈哈,问句每年都会问的:今年,你对自己的行业环境有什么感知吗?是好了还是差了?是想跑路还是想深耕?或许答案众说纷纭,或许你的内心也躁动不安或早已躺平,但在行动之前,先看完我这篇分析。耐下心,分两点和你聊聊,最近你可能会想知......
  • 离谱,居然还有网络工程师不懂什么是Overlay网络?
    下午好,我是老杨。伴随着网络技术的发展,数据中心的二层组网结构早已出现了阶段性的架构变化。数据中心网络分为了Underlay和Overlay两个部分,网络进入了Overlay虚拟化阶段。很多小友希望能多输出一些新技术,这不,今天就给你展开说说。Overlay网络是怎么形成的?与Underlay的区别又在哪?试......
  • 【校招VIP】 java语言考点之异常
    考点介绍:导致程序的正常流程被中断的事件,叫做异常。异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。异常发生的原因有很多,通常包含以下几大类:1.用户输入了非法数据。2.要打开的文件不存在。3.网络通信时连接中断,或者JVM内存溢出。一、考点题目......
  • JavaSE学习笔记day04
    IO流概念:OS的文件系统:(1)文件:文本文件、视频文件、音频文件、图像文件、可执行文件等等,这些文件都是由一个个字节组成的。(2)目录(文件夹):对文件进行归纳划分,将同类型的文件方法在同一个文件夹中,方便我们管理和使用。(3)资源访问路径:1)相对路径:相对于某一个文件夹......
  • TedNet:一个用于张量分解网络的Pytorch工具包
    摘要张量分解网络(TensorDecompositionNetworks,TDNs)因其固有的紧凑架构而流行。为了给更多的研究人员提供一种灵活的方式来利用TDNs,我们提出了一个名为TedNet的Pytorch工具包。TedNet实现了5种张量分解(即,CANDECOMP/PARAFAC(CP)、Block-TermTucker(BTT)、Tucker-2、TensorTrain(TT)和......
  • 钉钉机器人监控项目异常_JavaWeb实现
    在prod环境,项目所触发的运行时异常,developer往往无法第一时间得知讯息(在没有项目监控的前提下),为了解决这一问题,可以利用钉钉机器人监控项目异常,实时通知/警报给developer。1>自定义紧急异常EmergencyException2>在重要业务中产生的异常转换为此异常3>在全局异常捕获,针对此......
  • JAVA面试知识更新不断
    关注公众号,更多惊喜后续知识等着你知识无边界,它如同一条连绵不绝的河流,源源不断地流淌着。正如今天我们迁移到新平台一样,我们以崭新的姿态面对无限的可能性。迁移到新平台,意味着我们跨越了过去的界限,踏上了新的征程。这是一个机会,一个展示我们创造力和适应能力的舞台。新平台可......
  • X710网卡LACP模式下ifdown网卡后交换机侧依然处于UP状态,导致网络通信异常
    以下配置属于临时配置,重启后失效,具体建议在bios或者固件中解决。主要包含两个配置:1、使用ifdown命令关闭网卡无法使linkdown,交换机侧依然认为端口UP进行流量转发,无法正常通信2、在某些环境中,LACP可能无法正常工作,这些环境要求将包含LCAP信息的LLDP帧转发到网络堆栈。#查看网卡......
  • 如何认识数据安全与网络安全的关系?数据安全与个人信息保护的关系如何?
    什么是数据安全?数据安全,是指通过采取必要措施,确保数据处于有效保护和合法利用的状态,以及具备保障持续安全状态的能力。数据安全的内涵可从两个方面来认识:一是保护数据的完整性、保密性、可用性;二是保护数据承载的国家安全、公共利益或者个人、组织合法权益,比如个人信息保护、涉及国......
  • 25大编程代码
    注册功能代码二次优化#如何将校验用户是否已存在和注册用户逻辑合并因为两者其实都属于用户注册功能将校验用户是否存在的代码嵌入到注册代码中即可通过返回值来控制#针对核心逻辑层的函数返回值做了优化返回多个数据目前是两个第一个用于告知......