网络

网络

网络模型与协议

OSI
常被说成OSI七层,TCP/IP五层或者四层
七层模型 : 应用层,表示层,会话层,传输层,网络层,链路层,物理层
五层模型 : 应用层,传输层,网络层,链路层,物理层
四层模型 : 应用层,传输层,网络层,链路层

应用层:
http(超文本传输协议)
ftp(文件传输协议)
stmp (邮件发送协议)
pop3(邮件接收协议)
ssh ( 安全shell,用于远程登录)

传输层:
tcp(安全可靠的协议)
udp(不可靠)

网络层:
ip : 地址的作用是用来定位到网络上另一台计算机
windows下可以使用 ipconfig来查看ip地址
linux 下可以使用 ifconfig来查看ip地址

端口是计算机与外界通信交流的入口和出口
端口号的作用是用来标记,要访问对方的哪个程序

  • http服务使用 80 端口
  • ftp服务使用21 端口
  • ssh服务使用22端口
  • qq使用的是8000端口
  • oracle监听端口使用1521 8080
  • mysql监听端口是3306
  • redis使用的是6379端口
  • tomcat使用的是8080端口

传输层协议TCP

特点 :
是一个有连接、可靠的协议。所谓有连接,指的是在进行 TCP通信之前,两个需要通信的
主机之间要首先建立一条数据通道,就好像打电话进行交流之前,首先要让电话接通一样。所
谓可靠,指的是 TCP 协议能够保证: 1、发送端发送的数据不会丢失; 2、接收端接受的数据包
的顺序,会按照发送端发送的包的顺序接受。也就是说, TCP协议能够保证数据能够完整无误的
传输。

传输层协议UDP

特点 :
1)与 TCP 协议相比, UDP 是一个无连接,不可靠的协议。 即:数据的发送方只负责将数
据发送出去,数据的接受方只负责接受数据。发送方和接收方不会相互确认数据的传输是否成功。
2)相对于 TCP 而言, UDP 有一个优点:效率较高。因此,当我们在对数据传输的正确率
不太关心,但是对传输效率要求较高的情况下,可以采用 UDP 协议。典型的使用 UDP 协议的
是网络语音以及视频聊天应用。

java中的网络编程

Socket API 对tcp、udp协议做了封装,能够连接到对方主机,收发数据
服务器端 :

 

public static void main(String[] args) throws IOException {
    // 可以与客户端的socket建立连接  端口号一般使用4位以上的数字
    ServerSocket ss = new ServerSocket(5555);
    System.out.println("ready...等待客户端连接");
    // 端点
    Socket socket = ss.accept();// 等待客户端连接我服务器方法,直到有客户端连接
    InputStream is =socket.getInputStream();
    .....
    .....
}

客户端:

 

public static void main(String[] args) throws IOException {
    // 本机ip地址在dos界面使用`ipconfig`来查看
    // 它的别名     localhost
    // 端点
    Socket socket = new Socket("localhost", 5555);
    OutputStream os = socket.getOutputStream();
    Scanner sc = new Scanner(System.in);
    String s = sc.nextLind();
    os.write(s.getBytes());
}

扩展设计模式(一)

单例(singleton) 模式

定义: 在jvm虚拟机中, 某个类只有一个实例,就称之为单例。

饿汉式单例

方法一

 

public class Singleton {
    // 1. 把构造方法变为私有,这样就限制了其它类创建Singleton的实例
    private Singleton(){}
    // 2. Singleton类自己创建唯一的一个实例
    private static Singleton me = new Singleton();
    // 3. 提供一个公共方法返回此唯一实例
    public static Singleton getInstance() {
        return me;
    }
}
//实例只需调用getInstance方法即可

方法二

 

public enum Singleton4 {
    ME;
    private Singleton4(){
        System.out.println("Singleton4 的构造方法被调用");
    }
    public static void test() {
        System.out.println("test");
    }
    public static void main(String[] args) {
        Singleton4.test();
    }
}

懒汉式单例

刚开始不创建,第一次用到时才创建
方式一

 

public class Singleton2 {
    private Singleton2() {  }
    private volatile static Singleton2 me; // null  设为volatile保证它的可见性
    // 潜在问题, 需要考虑线程安全, 可以使用synchronized来解决
    public static synchronized Singleton2 getInstance() { // 锁住了Singleton2.class
        // 先判断是不是第一次使用me(是否为null)
        if( me == null ) { // 线程1. null  // 线程2. null
            me = new Singleton2();
        }
        return me;
    }
    // double check 方式
    public static Singleton2 getInstance2() {
        if( me == null ) {
            // 优化,进一步缩小了synchronized的范围,仅在第一次调用getInstance2方法时才会同步
            synchronized (Singleton2.class) {
                if( me == null ) {
                    me = new Singleton2();
                }
            }
        }
        return me;
    }
}

方式二(优化)

 

public class Singleton3 {

    private Singleton3() {
        System.out.println("Singleton3 构造方法被调用");
    }

    private static class Holder {
        private static Singleton3 ME = new Singleton3();
    }

    public static Singleton3 getInstance() {
        return Holder.ME;
    }
    public static void test() {
        System.out.println("test");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值