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

网络编程

时间:2024-03-11 19:46:24浏览次数:21  
标签:java socket InetAddress 编程 网络 import close new

网络编程

概述

信件

image-20220819111710419

计算机网络:

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

网络编程的目的:

无线电脑...传播交流信息,数据交换。通信

想要达到的这个效果是什么:

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

javaweb:网页编程,B/S

网络编程:TCP/IP C/S

1.2、网络通信的要素

人工智能:智能汽车

如何实现网络的通信?

通信双方地址:

  • ip
  • 端口号
  • 192.168.16.124.5900

规则:网络通信的协议

TCP/IP参考模型image-20220819113557432

小结:

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

    • 如何准确的定位到网络上的一台或者多台主机
    • 找到主机后如何进行通信
  2. 网络编程中的要素

    1. IP和端口号 IP.
    2. 网络通信协议UDP TCP
  3. 万物皆对象

1.3、IP

ip地址:address

  • 唯一定位一台网络上的计算机

  • 127.0.0.1:本机localhost

  • ip地址的分类

    • ipv4、ipv6
      • IPV4 127.0.0.1 4个字节组成。0-255,42亿~;30亿都在北美,亚洲4亿,2011年用完
      • IPV6 fe80::3d5f:9174:92e3:f9c7%21,128位。8个无符号整数!abcde
        • 2001:0bb2:aaaa:0015:0000:0000:1aaa:1312!
    • 公网(互联网)-私网(局域网)
      • ABCD类地址
      • 192.168.xx.xx,专门给组织内部使用的
  • 域名:记忆IP问题!

    • IP :www.vip.com
package com.xccvt;

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

//测试IP
public class lesson01 {
    public static void main(String[] args) {
        try {
//          查询本机地址
            InetAddress inetAddress=InetAddress.getByName("127.0.0.1");
            System.out.println(inetAddress);
            InetAddress inetAddress1=InetAddress.getByName("www.baidu.com");
            System.out.println(inetAddress1);
            InetAddress inetAddress2=InetAddress.getByName("xccvt.cn");
            System.out.println(inetAddress2);
            InetAddress inetAddress3=InetAddress.getLocalHost();
            System.out.println(inetAddress3);
//            System.out.println(inetAddress3.getAddress());
            System.out.println(inetAddress2.getCanonicalHostName());//规范的名字
            System.out.println(inetAddress2.getHostAddress());//ip
            System.out.println(inetAddress2.getHostName());//域名、或者自己电脑的名字


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

1.4端口

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

  • 不同的进程有不同的端口号!用来区分软件!

  • 被规定0-65535

  • TCP,VDP:65535*2 tcp:80,udp:80码,单个协议下:端口号不能冲突

  • 端口分类

    • 公用端口0-1023

      • HTTP:80
      • HTTPS:443
      • FTP:21
      • Telent:23
    • 程序注册端口:1024-49151,分配用户或者程序

      • Tomcat:8080
      • MySQL:3306
      • Oracle:1521
    • 动态、私有:49152-65535

    • netstat -ano #查看所有端口
      netstat -ano|findstr "8657"	#查看指定端口
      tasklist|findstr "8657"	#查看指定端口进程
      

      image-20220820094121970

1.5、通信协议

协议:约定

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

问题

大事化小:分层!

TCP/IP协议簇

重要:

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

出名的协议:

  • TCP
  • UDP:用户数据协议

image-20220820094605298

TCP udp对比

TCP:打电话

  • 连接,稳定

  • 三次握手 四次挥手

  • 最少需要三次,保证稳定连接
    A:发送-信息
    B:接受-告诉你
    A:好-知道了
    
    
    
    
    
  • 客户端、服务端

  • 传输完成,释放连接,效率低

UDP:发短信

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

1.6、TCP

客户端

1、连接服务器Socket

2、发送消息

服务器

  1. 建立服务的端口ServerSocket
  2. 等待用户的链接accept
  3. 接受用户的消息
package com.xccvt.Lesson02;

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

public class TcpClientDemo01 {
    public static void main(String[] args) {
        Socket socket=null;
        OutputStream os=null;
        try {
            InetAddress serverip=InetAddress.getByName("127.0.0.1");
            int port=9999;
            socket=new Socket(serverip,port);
            os=socket.getOutputStream();
            os.write("您好15456464".getBytes());
        } catch (Exception 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();
                }
            }

        }
    }
}
package com.xccvt.Lesson02;

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

//服务器
public class TcpServerDemo01 {
    public static void main(String[] args) {
        ServerSocket serverSocket=null;
        Socket socket=null;
        InputStream is=null;
        ByteArrayOutputStream baos=null;
        try {
            serverSocket=new ServerSocket(9999);
            socket=serverSocket.accept();
            is=socket.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 ByteArrayOutputStream();
            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 (IOException e){
                    e.printStackTrace();
                }
            }
            if (socket!=null){
                try {
                    socket.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
            if (is!=null){
                try {
                    is.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
            if (serverSocket!=null){
                try {
                    serverSocket.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

文件上传

package com.xccvt.Lesson02;

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

public class TcpClientDemo02 {
    public static void main(String[] args) throws IOException {
//       1、创建一个Socket链接

            Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),9000);
//            2、创建一个输出流
            OutputStream os=socket.getOutputStream();
//            3、文件流
            FileInputStream fis=new FileInputStream(new File("1.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[2014];
            int len2;
            while ((len2=inputStream.read(buffer2))!=-1){
                baos.write(buffer2,0,len2);
            }
            System.out.println(baos.toString());
            baos.close();
            fis.close();
            os.close();
            socket.close();
    }
}
package com.xccvt.Lesson02;

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

//服务器
public class TcpServerDemo02 {
    public static void main(String[] args) throws IOException {
//        1、创建服务
        ServerSocket serverSocket=new ServerSocket(9000);
//        2、监听客户端的连接
        Socket socket=serverSocket.accept();
//        3、获取输入流
        InputStream is=socket.getInputStream();
//        4、文件输出
        FileOutputStream fos=new FileOutputStream(new File("receive.jpg"));
        byte[] buffer=new byte[1024];
        int len;
        while ((len=is.read(buffer))!=-1){
            fos.write(buffer);
        }
//        通知客户端我接受完毕了
        OutputStream os=socket.getOutputStream();
        os.write("接受完毕".getBytes());
        fos.close();
        is.close();
        socket.close();
        serverSocket.close();

    }
}

Tomact

服务器!

  • 自定义
  • Tomcat服务器:java后端

客户端

  • 自定义C
  • 浏览器B

1.7UDP

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

发送端

package com.xccvt.com.lesson03;

import java.net.*;

public class UdpClientDemo01 {
    public static void main(String[] args) throws Exception {
//        1、建立一个Socket
        DatagramSocket socket=new DatagramSocket();

//        2、建个包
        String msg="你好啊,服务器!";
//        发送给谁
        InetAddress localhost = InetAddress.getByName("localhost");
        int port=9090;
//        数据
        DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);

//        3、发送包
        socket.send(packet);
//        4、关闭流
        socket.close();
    }
}

接收端

package com.xccvt.com.lesson03;


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

public class UdpServerDemo01 {
    public static void main(String[] args) throws Exception {
//        开放端口
        DatagramSocket socket = new DatagramSocket(9090);
//        接受数据包
        byte[] buffer=new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
        socket.receive(packet);//阻塞接受
        System.out.println(packet.getAddress().getHostAddress());
        System.out.println(new String(packet.getData(),0,packet.getLength()));

//        关闭链接
        socket.close();
    }
}

咨询

标签:java,socket,InetAddress,编程,网络,import,close,new
From: https://www.cnblogs.com/2580p/p/18066888

相关文章

  • SD-WAN专线对本地网络有哪些要求?
    SD-WAN(软件定义广域网)是一种新型的网络架构,通过软件定义的方式,将网络控制平面和数据转发平面进行分离,从而实现网络的灵活性、可编程性和自动化管理。在部署SD-WAN专线时,本地网络需要满足一些要求,以确保SD-WAN专线网络的稳定运行和高效性能。以下是SD-WAN专线对本地网络的几个重要......
  • Kubernetes 网络
    简述Kubernetes网络模型Kubernetes网络模型中每个Pod都拥有一个独立的IP地址,不管它们是否运行在同一个Node(宿主机)中,都要求它们可以直接通过对方的IP进行访问;同时为每个Pod都设置一个IP地址的模型使得同一个Pod内的不同容器会共享同一个网络命名空间,也就是同一个Linux网络协议栈......
  • 如何利用cps推广进行网络兼职?
    如今的互联网发展很快、变革很大,从最早用免费空间做个人主页,到后来购买虚拟主机做个人网站,到后来的VPS主机和独立服务器,直到现在一直使用云服务器。我经历了早期互联网的萌芽时期,也错过了很多互联网的机遇。从最早靠传统广告联盟盈利,到后来做包月付费广告。直到2019年接触了解cps......
  • [3] C++面向对象编程
    Day1函数指针数组简写函数指针typedeftypedefint(*FunPtr)(int,int);FunPtrFunArr[1]={Add};内联函数#pragmaregion内联函数//避免函数跳转对于程序的额外开销//有两种写法1).h中写实现文件(在.h中同时写声明和实现)//2)inline关键字......
  • 关于网络的一些东西
    网络趣事你是一台孤单的电脑A 直到有一天,你希望与另一台电脑B建立通信,于是你们各开了一个网口,用一根网线连接了起来。 用一根网线连接起来怎么就能"通信"了呢?我可以给你讲IO、讲中断、讲缓冲区,但这不是研究网络时该关心的问题。如果你纠结,要么去研究一下操作系......
  • 云计算 - 内容分发网络CDN技术与应用全解
    在这篇全面解析CDN的技术文章中,我们深入探讨了CDN的基础概念、核心架构、多样化产品和在不同行业中的应用案例。文章揭示了CDN技术如何优化内容分发,提升用户体验,并展望了CDN面临的挑战和未来发展趋势。关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有......
  • 简单懂点k8s网络(5)深入理解kube-proxy
         ......
  • 网络流量监测分析,国产、高性能、高可用
        随着网络规模不断扩大,复杂程度不断增加,给运维工作带来更大挑战。为保障网络正常、稳定、高效运行,对网络流量进行监测、存储、回溯成为不可或缺的手段,通过对流量的分析,运维人员可以更加全面的了解整体网络的运行状态,快速定位、解决网络中存在问题。    智和信......
  • 异步编程真的让程序更快了吗?
    同步和异步调用的本质区别是什么?引言现在异步编程真的是越来越普遍了,从前端的Promise到后端的Channel、Future、Task,异步编程正变得越来越流行。很多同学也玩得很溜了,满世界的异步调用,让程序的效率和用户体验都大大提升。不过,当谈到为什么要使用异步编程,以及它背后的工作原理时......
  • gleam 类型安全的编程语言
    gleam类型安全的新编程语言,基于rust开发,编程语法上与rust特性类似,runtime基于了erlang特点支持函数式编程基于erlangruntime(当然也就包含了不少erlang的特性了)包含了完整的工具连(编译器,构建工具,格式化工具,编辑器集成,包管理)可以方便的使用erlang,elixir周遍的已有的包......