Zookeeper教程-8 Socket机制

本文详细介绍了Java中Socket的UDP和TCP通信实例,展示了如何使用DatagramSocket和Socket进行网络编程,并以Zookeeper为例探讨了分布式环境中的协调服务。从基本的套接字原理到实战项目,涵盖了通信协议、服务端与客户端实现及Zookeeper在分布式场景的应用。
Socket概述

Socket,又称为套接字,用于描述IP地址和端口。应用程序通常通过socket向网络发出请求或者应答网络请求。Socket就是为网络编程提供的一种机制:

  • 通信两端都有socket
  • 网络通信其实就是socket之间的通信
  • 数据在两个socket之间通过IO传输
  • 网络编程也称作为Socket编程,套接字编程
  • Socket通信是Client/Server模型
基于UDP协议的Socket通信

新建Java工程:socket2020
核心类:DatagramSocket
客户端:创建类com.antherd.socket.udp.UDPSocketClient

package com.antherd.socket.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPSocketClient {

  public static void main(String[] args) throws Exception {
    // 创建发送端的Socket对象
    DatagramSocket client = new DatagramSocket();
    // 把发送的数据打包
    String message = "Hello UDP?";
    InetAddress address = InetAddress.getLocalHost();
    int port = 12312;
    DatagramPacket packet = new DatagramPacket(message.getBytes(), message.getBytes().length, address, port);
    // 发送打包的数据
    client.send(packet);
    // 资源释放
    client.close();
  }
}

服务端:创建类com.antherd.socket.udp.UDPSocketServer

package com.antherd.socket.udp;

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

public class UDPSocketServer {

  public static void main(String[] args) throws Exception {
    // 创建服务端socket对象,DatagramSocket
    DatagramSocket server = new DatagramSocket(12312);
    // 创建接收数据的数据包(数据接收的容器)
    byte[] bytes = new byte[1024];
    DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
    // 接收数据
    server.receive(packet);
    // 针对数据包进行解析
    String host = packet.getAddress().getHostAddress();
    byte[] data = packet.getData();
    System.out.println("接收来自:" + host + ",信息:" + new String(data));
    // 释放资源
    server.close();
  }
}

先启动服务端程序,服务端程序在接收到消息前一直处于阻塞状态。接着启动客户端,客户端发送消息后退出运行。服务端接收到消息后也停止运行。

服务端接收到消息

基于TCP协议的Socket通信

核心类:Socket
客户端:创建类com.antherd.socket.tcp.TCPSocketClient

package com.antherd.socket.tcp;

import java.io.OutputStream;
import java.net.Socket;

public class TCPSocketClient {

  public static void main(String[] args) throws Exception {
    // 创建客户端的Socket服务
    // 在Socket中指定传输数据的目的ip和端口
    Socket client = new Socket("127.0.0.1", 12312);
    // 通过Socket建立的通道输出数据
    // 取得输出流,写数据
    OutputStream outputStream = client.getOutputStream();
    outputStream.write("Hello TCP?".getBytes());
    // 释放资源
    client.close();
  }
}

核心类:ServerSocket
服务端:创建类com.antherd.socket.tcp.TCPSocketServer

package com.antherd.socket.tcp;

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

public class TCPSocketServer {

  public static void main(String[] args) throws Exception {
    // 建立服务端的Socket服务, 并且监听本机的一个端口
    ServerSocket server = new ServerSocket(12312);
    // 监听连接,阻塞的方法,有请求过来,建立连接,返回与之对应的Socket来通信,ServerSocket依然保持服务
    Socket s = server.accept();
    // 获取输入流,读取数据
    InputStream inputStream = s.getInputStream();
    byte[] bytes = new byte[1024];
    int length = inputStream.read(bytes);
    System.out.println("信息:" + new String(bytes, 0, length));
    // 释放资源,一般不关闭ServerSocket,用于一直接受数据
    s.close();
  }
}

先启动服务端程序,服务端程序在接收到消息前一直处于阻塞状态。接着启动客户端,客户端发送消息后退出运行。服务端接收到消息后未停止运行,继续接受消息。

SocketServer接收到信息

Zookeeper视频教程

TFT LCD(薄膜晶体管液晶显示器)是一种广泛应用于电子设备中的显示技术,其工作原理涉及到电子物理学、光学和计算机硬件等多个领域。理解TFT LCD的驱动和显示原理对于进行驱动开发至关重要。我们来看看TFT LCD的工作原理。TFT(薄膜晶体管)在每个像素点上都有一个对应的晶体管,它作为开关来控制该像素点的亮度。当电流通过TFT时,液晶分子的排列方式会发生变化,进而影响光线通过的程度。液晶分子不直接发出光,而是通过调节背光源的光线来改变颜色和亮度,形成图像。液晶显示器的驱动原理主要分为两部分:时序控制和电压驱动。时序控制决定了数据在正确的时间被送到正确的像素位置,这通常由LCD控制器来实现,它按照一定的时钟信号和命令序列来操作。电压驱动则涉及如何通过不同的电压值来改变液晶分子的角度,以达到不同的灰度等级。液晶对电压的响应是非线性的,因此需要精心设计的电压-灰度曲线来确保色彩的准确显示。TFT LCD的显示原理主要包括以下几个步骤:1. 背光源:显示器背后的LED或CCFL(冷阴极荧光灯)提供均匀的光源。2. 分光层:光线先通过偏振片,只允许特定方向的光通过。3. 液晶层:液晶分子受到电压的影响,改变其排列方式,使得光线通过时发生扭曲。4. 彩色滤光片:通过红、绿、蓝三种颜色的滤光片,将光线分解为三原色,组合成各种颜色。5. 反射或透射:根据显示器类型,光线可能经过一次反射或直接透射到前面板的另一侧。6. 前面板:再次通过偏振片,使得只有改变了方向的光线能通过,形成图像。在驱动开发过程中,工程师需要关注以下几点:1. 控制器编程:设置正确的时序和电压,使每个像素点按预期工作。2. 驱动电路设计:确保足够的电流供应,避免显示异常。3. 调整灰度等级:通过调整电压,实现256级灰度或更多,提高图像质量。4. 驱动软件:编写固件和驱动程序,实现与主机系统的通信和图像数据的传输。TFT LCD液晶显示器的驱动和显示原理是一个复杂的系统工程,需要理解光学、电学以及数字信号处理等多个领域的知识。通过深入学习这些原理,我们可以更好地设计和优化显示设备,提升用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值