zoukankan      html  css  js  c++  java
  • 网络端

    1.synchronized 同步锁
    同步方法:
    成员|静态
    简单,但是锁的范围一般可能较大,效率低
    同步块
    类的class:相当于锁了类的整个信息|所有对象
    this:锁当前对象,锁了这个对象的所有资源
    资源:一般锁不变的内容--对象地址
    锁的范围太大效率低,锁的范围太小可能锁不住
    锁一定要锁不变的内容

    死锁:
    需要避免锁使用的过于频繁,遇到对象无法释放的情况,否则出现死锁的问题

    2.线程通信(生产者消费者模式)
    wait():线程处于等待状态
    释放对象的锁,cpu的资源
    notify():唤醒对方正在处于等待池中的线程
    没有对象的资源,就算是被唤醒也无法执行,必须要获取到对象的锁才能有资格执行
    notifyAll()
    唤醒全部
    注意:使用在一个同步的环境下

    3.IP:定义网络上的节点(电脑,手机,pad,路由器...)..区分节点
    分类:
    IPV4 : 32位
    IPV6 : 128位

    特点的IP:
    局域网内部IP:192.168.0.0~192.168.255.255
    127.0.0.1 : 默认本地IP
    localhost : 本地域名
    DNS服务器:解析IP和域名之间的关系

    InetAddress 此类表示互联网协议 (IP) 地址。
    static InetAddress getLocalHost() 返回本地主机。
    static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。

    String getHostName() 获取此 IP 地址的主机名。
    String getHostAddress() 返回 IP 地址字符串(以文本表现形式)。

    端口: InetSocketAddress

    4. 端口port:区分软件...
    2个字节: 0~65535
    注意:
    1.同一的协议下端口号不能冲突
    2.自定义设置端口号建议设置越大越好,一般8000网上
    预留端口号:
    80: http
    8080:tomcat
    1521:Oracle
    3306:Mysql

    InetSocketAddress 此类实现 IP 套接字地址(IP 地址 + 端口号)。
    InetSocketAddress(String hostname, int port) 根据IP|域名+端口号构建
    InetAddress getAddress() 获取 InetAddress。
    String getHostName() 获取 hostname。
    int getPort() 获取端口号。

    5.URL:统一资源定位符
    互联网三大基石: http html url
    url的构成:
    协议
    域名
    端口
    资源
    数据
    "http://www.baidu.com:80/index.html?name=zhangsan&pwd=123#a"

    URL(String spec) 构建url

    6-1.Socket套接字: 传输层为应用层开辟的小口子,通过 Socket进行发送和接收数据
    不同协议下的socket实现不同
    面向Socket编程

    tcp: 面向连接 打电话 安全 开销大 基于3次握手 大小没有限制 . 基于流传输
    udp: 非面向连接 写信|发短信 只管写只管发 开销小,效率高 不安全 大小有限制 一般不超过60k , 基于字节数组传输

    基于udp的socket编程:
    发送端
    接收端
    DatagramSocket 此类表示用来发送和接收数据报包的套接字。(定义发送端|接收端)
    DatagramPacket数据报包(数据打包)

    udp实现发送端的基本流程: 发送端和服务端是平等的
    1.定义发送端 DatagramSocket(端口号) 指定发送端的端口号
    2.准备数据
    3.对数据打包 DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
    构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。
    4.发送void send(DatagramPacket p)
    5.关闭 void close() 关闭此数据报套接字。

    6-2.接收端基本流程:
    1.定义接收端 DatagramSocket(int port)
    2.准备字节数组
    3.准备包裹用来接收数据 DatagramPacket(byte[] buf, int length)
    4.接收
    5.从包裹中获取数据
    byte[] getData()
    返回数据缓冲区。
    int getLength()
    返回将要发送或接收到的数据的长度。
    6.关闭

    7-1.Socket 此类实现客户端套接字
    客户端
    1.定义客户端 Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。
    2.IO操作
    输出流OutputStream getOutputStream() 返回此套接字的输出流。
    3.刷出
    4.关闭
    7-2.ServerSocket 此类实现服务器套接字。
    TCP服务端
    1.定义服务端 ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
    2.阻塞式监听 一个客户端连接成功,就是一个socket
    3.io操作
    4.关闭

    8-1.TCP实现文件上传客户端 :
    1.定义客户端 Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。
    2.IO操作 先从文件中读入数据-->写出数据
    new FileInputStream("");
    输出流OutputStream getOutputStream() 返回此套接字的输出流。
    3.刷出
    4.关闭
    8-2.TCP实现文件上传服务端:
    1.定义服务端 ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
    2.阻塞式监听 一个客户端连接成功,就是一个socket
    3.io操作 :从客户端读入数据 --->文件输出流 写出文件中
    4.刷出
    5.关闭

  • 相关阅读:
    AcWing每日一题--最大的和
    使用 *args 和 **kwargs 的含义
    Python的八大基本数据类型之 元组、列表、字典
    条件判断与if嵌套
    数据拼接与转换
    print()函数与转义字符
    BEGIN-2 序列求和
    BEGIN-1 A+B问题
    并发编程——进程——生产者消费者模型
    并发编程——进程——进程的同步与数据共享
  • 原文地址:https://www.cnblogs.com/jj-01/p/11210332.html
Copyright © 2011-2022 走看看