java网络编程

原创
10/18 23:05
阅读数 0

网络编程

1.1概述

地球村

计算机网络

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

1.2网络通信的要素

如何实现网络通信?

通信双方地址:

  1. ip
  2. 端口号

规则:网络通信协议

TCP/IP参考模型:

OSI七层协议

七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

五层划分为:应用层、传输层、网络层、数据链路层、物理层

四层划分为:应用层、传输层、网络层、网络接口层

img

小结:

  1. 网络编程中有两个主要问题
    • 如何准确的定位到网络上的一台或多台主机
    • 找到主机之后如何进行通信
  2. 网络编程中的要素
    • IP和端口号 (建立IP类即对象)
    • 网络通信协议 (建立UDP/TCP类即对象)
  3. 万物皆对象

1.3IP

IP地址:InetAddress

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

  • 127.0.0.1;本机localhost

  • IP地址分类

    • ​ ipv4/ipv6
      • IPV4 127.0.0.1 4个字节组成 。0~255,42亿;30亿在北美。亚洲4亿
      • IPV6 fe80::dc0c:8236:1d55:7042%17 ,128位,8个无符号整数
    • 公网(互联网)-私网(局域网)
      • ​ ABCD类地址
      • 192.168.xx.xx,专门给组织内部使用的
  • 域名:解决记忆IP问题!

    • ​ IP:www.jd.com
//查询本机地址
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.getAddress())﹔
system.out.println(inetAddress2.getCanonicalHostName());
system.out.println(inetAddress2.getHostAddress());
System.out.println(inetAddress2.getHostName());

1.4端口

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

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

  • 被规定0~65535

  • TCP,UDP:65535*2

  • 端口分类

    • 公有端口号: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 "5900" #查看指定的端口
tasklist|findstr "8696" #查看指定端口的进程

1.5通信协议

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

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

问题:非常复杂

大事化了:分层

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

重要

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

出名的协议:

  • TCP
  • IP:网络互联协议

TCP与UDP对比

TCP:打电话

  • 建立连接,稳定

  • 三次握手、四次挥手

    • 三次握手
      A;你瞅啥?
      B;瞅你咋地!
      A;干一场!
      
      四次挥手
      A;我要走了
      B;你真的要走了吗
      B;你真的真的要走了吗
      A;我真的要走了
      
  • 客服端、服务器

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

UDP:发短信

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

1.6TCP

文件传输

客户端

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

public class TcpClientDemo02 {
    public static void main(String[] args) throws IOException {
        //获取服务地址端口
        Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),9898);
        //创建输出
        OutputStream outputStream=socket.getOutputStream();
        //文件输入
        FileInputStream fis=new FileInputStream(new File("asd.jpg"));

        byte[] buffer=new byte[1024];
        int len;
        while ((len=fis.read(buffer))!=-1){
            outputStream.write(buffer,0,len);
        }
        //通过服务器我已输出
        socket.shutdownOutput();
        //确定服务器接收完毕
        InputStream inputStream=socket.getInputStream();
        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
        byte[] buffer2=new byte[1024];
        int len2;
        while ((len2=inputStream.read(buffer2))!=-1){
            byteArrayOutputStream.write(buffer2,0,len2);
        }
        System.out.println(byteArrayOutputStream.toString());
        //关闭连接
        inputStream.close();
        byteArrayOutputStream.close();
        fis.close();
        outputStream.close();
        socket.close();

        
    }
}

服务器

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

public class TcpServerDemo02 {
    public static void main(String[] args) throws IOException {
        //创建服务
        ServerSocket serverSocket=new ServerSocket(9898);
       //监听连接
        Socket socket=serverSocket.accept();
        //获取输入
        InputStream inputStream=socket.getInputStream();
        //文件输出
        FileOutputStream fos=new FileOutputStream(new File("receive.jpg"));
        byte[] buffer=new byte[1024];
        int len;
        while ((len=inputStream.read(buffer))!=-1){
            fos.write(buffer,0,len);
        }
        //通知客户端接收完毕
        OutputStream outputStream=socket.getOutputStream();
        outputStream.write("收到".getBytes());
        //关闭
        outputStream.close();
        serverSocket.close();
        socket.close();
        inputStream.close();
        fos.close();
    }



}

Tomcat

服务器

  • 自定义 S
  • Tomcat服务器 S

客户端

  • 自定义 C
  • 浏览器 B

1.7UDP

展开阅读全文
打赏
0
0 收藏
分享

作者的其它热门文章

加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部