通信总结之二

串行通信——异步串行通信 目录 I、串口通信简介 一、定义 二、意义 三、分类 II、异步串行通信详解 一、数据格式 1. 起始位 2. 数据位 3. 奇偶校验位 4. 停止位 二、通信制式 1. 单工 2. 半双工 3. 全双工 三、通信速率 I、串口通信简介 一、定义 在一条传输线上,数据以“位”为单位进行逐个传输,即为串行通信。 二、意义 并行通信控制简单、相对传输速度快... 阅读详情

群聊服务器 

    群聊服务器要将所有连接到服务器上的客户端对象都集中到一起(比如一个队列)来处理,将其中每个对象发送的消息转发给其他所有连接的客户端,并且在有新连接加入时对其他的连接的客户端进行通知等等功能。所以需要编写几个类来分别实现这些功能。每个类的功能要尽量的单一,这样便于调试。

 

    服务器增加了验证登陆信息、转发消息等多个功能,也就需要增加几个类来辅助。首先对于登陆用户来说,需要验证其用户名和密码,创建一个DaoTools类:负责验证用户名和密码是否正确。验证用户信息的过程可以首先模拟一个数据库,用一个map存储用户名和对应的用户信息,在运行到验证模块前就将设置好的数据存入MAP,验证时,通过用户名得到对应的用户类,也就得到了该用户密码,验证是否符合。因此,也就需要创建一个用户信息类,其中存储用户名,密码以及以后可能用到的IP地址、登录时间等等信息。转发消息作为另外一个独立功能,也需要建立一个辅助类,其中放置通知上下线以及转发消息的方法。因为上线用户个数不定,可用一个队列来存放客户端处理线程类每增加一个客户连入,则启动一个处理线程,加入到队列中,而当前在线人数就是该队列的长度。转发消息则只要遍历队列,发送消息即可达成。

综上,总共需要设置五个类:

ChatServer类:创建服务器并等待连结。

ServerThread类:处理连结的线程类,读取客户端输入流并发送给客户端。

UserInfo类:用户信息类,存放用户属性。

DaoTools类:一个辅助类,使用时并不需要创建对象,直接调用其中存放的方法就好,因此其中的方法都是static方法。这个类中存放的是验证用户登录的方法。

ChatTools类:同样不需要创建对象,是一个辅助方法,转发客户机发送的消息,并有将新上线的用户即一个线程加入队列或者下线用户移除队列的方法。

 

    这里列出DaoTools类的代码,因为其中使用了静态块的方法。静态块是在类被加载之时就优先执行的代码,所以在验证用户信息之时,就不会出现map中无数据的情况。

package Server1;

import java.util.HashMap;
/**
 *
系统数据访问操作实现类
 * 帐号验证,数据保存,更改……
 * @author Administrator
 *
 */
public class DaoTool {
 /**
  * 查看这个用户是否可以登录成功
  * @param user:要检查的用户对象
  * @return:是否成功登录
  */
 public static boolean checkLogin(UserInfo user){
  //在此只验证用户名是否存在
  if(userDB.containsKey(user.getName())){
   return true;
  }
  System.out.println("认证失败!:"+user.getName());
  return false;
  
 }
 //内存用户信息数据库
 private static java.util.Map<String, UserInfo> userDB = new HashMap<String, UserInfo>();
 //静态块:模拟生成内存中的用户数据,用户名为user1~10
 //当程序启动时,这段代码(静态块中的)会自动执行,向userDB中放放数据
 static{
  for(int i =0;i<10;i++){
   UserInfo user = new UserInfo();
   user.setName("user"+i);
   user.setPassword("password"+i);
   userDB.put(user.getName(), user);
  }
 }
 
}

 简单客户端

 

    简单客户端与服务器类似,不过客户端不是要开放端口来等待连接,而是要知道服务器的IP和端口去连接。客户端对象是Socket类的对象,在创建时即要指定要连接的服务器的IP和端口。

    Socket client = new Socket("ip",port);

其中ip是一个代表地址的字符串,port则是一个int值。

    与服务器存在同样的问题,所以这条语句也需要try catch(当然throws也可以)。

    之后从这个Socket对象上取得输入输出流就可以与服务器进行通信了。当然,通信还是要按照一定的协议,这样双方才能够互相理解对方在说什么!

 

串行通信、并行通信;全双工、半双工、单工通信;同步通信、异步通信;通信速率 目录 串行通信 并行通信 串行通信与并行通信示意图 串行通信与并行通信的特性对比 全双工、半双工、单工通信 同步通信与异步通信 通信速率 串行通信 按照数据传送的方式,通信可分为串行通信和并行通信。串行通信时是指设备之间通过少量数据信号线(一般是8根以下)、地线及控制信号线,按数据位形式一位一位地传输数据的通信方式。 并行通信 一般是指使用8、16、32及64根或更多的数据线进行传输的通信方式。并行通信就像多条车道的公路,可以同时传输多位数据,而串行通信则像单条车道的公路,同一时刻.. 阅读详情

相关推荐

IIC总线、SPI总线、串口232通信、422通信、485通信、TCP/IP协议

最近在学习一些通信协议,查找资料,借鉴别人的论述,总结于下,仅供参考。相互学习,在此感谢几位博主写的技术贴! IIC总线协议:http://blog.youkuaiyun.com/zailushangha/article/details/8233448 SPI总线协议:http://blog.youkuaiyun.com/ce123_zhouwei/article/details/6897293

Charles' home 1万+

JAVA简单聊天室的实现

鉴于之前有不少同学在跟我要客户端的代码,我近期整理了一下,把整个工程都传到github上了。地址:https://github.co/Alexlingl/Chatroom 里面有比较详细的工程运行教程,这篇博客则主要对工程的代码实现进行介绍,没有通信知识基础的同学,在看这篇博客之前可以先看下我通信板块的另外几篇博客: 《JAVA通信(一)——输入数据到客户端》 《JAVA通信(二)——实现客...

Alexwym的博客 5万+

基于RS485通信的Modbus通信协议

通信可以分为两个方面:硬件层:RS485解决的是数据传输问题,也就是说如何将一个“0”或“1”传输到另外一端。(保证了数据可以转移到另一端)软件层:modbus是在硬件基础上的传输协议,解决的是数据传输的含义或意义。MCU要想实现RS485通信,必须借助电平转换芯片。 因为MCU是TTL电平信号,RS485是差分信号,如何将单端信号转换成差分信号就需要电平转换芯片。TTL电平在传输信号特性逻辑“0”对应的电气信号为0V,逻辑“1”对应的电气信号为5V。RS485通常有两根差分信号线,A和B,RS485的电平

有人住高楼,有人在深沟;有人光万丈,有人一身锈。 8004

通信方式的分类(串行通信和并行通信)

数据通信的基本方式根据数据的传输方式可以分为串行通信与并行通信两种。 串行通信又根据数据的同步方式,分为异步传送和同步传送两种方式。或者根据数据的传输方向与时间关系,分为单工通信、半双工通信及全双工通信三种方式。

Rocherrr的博客 3万+

数据通信基础(1)-数据通信概念、通信系统模型及通信方式

数据通信概念、数据通信系统模型及数据通信 方式。其中数据通信方式按照信道传输方式可分为串行通信和并行通信;按照消息传递方向与时间关系可以分为全双工通信、半双工通信、单工通信。

dxy0219的博客 1万+

golang 线上事故

golang 线上事故 最近公司要做大促的一些活动。并且单量,qps持续上涨。之前使用的是django python 语言做的一个服务端。目前已经部署的国家里面最多的国家会有300+个实例。大促期间还可能会增加一个实例数。这么多的实例部署,回滚的时间都会特变长,除了问题也不好定位。并且如此多的一个机器,连接数* 实例数也会导致DB等其他服务扛不住这么大的并发。所以决定上go服务解决性能问题。 ...

lcf枫的博客 1538

通信方式、通信接口、通信总线、通信协议的关系

通信方式、通信接口、通信总线、通信协议的关系

Rocherrr的博客 3万+

Qlib数据获取避坑指南:从CSV导入到自定义数据源的完整解决方案

本文详细解析了Qlib数据获取的完整解决方案,从CSV导入到自定义数据源,涵盖了股票数据处理的关键技巧和常见陷阱。特别针对Qlib平台的数据格式要求和复权处理提供了实用指南,帮助量化投资者高效整合Wind等第三方数据源,确保数据质量与模型性能。

weixin_29047919的博客 304

串口通信基础(一)——串行与并行通信,同步与异步通信

串口通信基本概念(一)——串行与并行通信,同步与异步通信 一、串口通信简介 串口通信,顾名思义也就是利用串行接口进行通信。串行接口指串口按位(bit)发送和接收字节。尽管比按字节(byte)传输的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。 串口通信中比较重要的参数包括波特率、数据位、停止位及校验位,通讯双方需要约定一致的数据格式才能正常收发数据。串行通讯可以进一步分为单工、半双工和全双工三种。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。它们的主要区别在于

sym_robot的博客 3万+

STM32 移植LwIP 实现网线插拔自动恢复

STM32 移植LwIP 之后,能正常联网通讯,但是发现2个问题, 1、上电初始化前,未插入网线,之后就无法获取到IP地址(DHCP) 2、正常通讯过程中,拔掉网线,然后插回去,不知道如何复位 先看一下LWIP初始化代码 /** * LwIP initialization function */ int MX_LWIP_Init() { /* Initilialize the LwIP stack with RTOS */ tcpip_init( NULL, NULL );

tiantangmoke的博客 8074

软件测试工程师最常用的Linux系统命令大全(汇总)

cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。

1330

通信协议、总线、接口,通信方式总结

是一组传输通道,在各种逻辑器件构成的传输数据的通道,一般由数据线、地址线和控制线构成。

2301_77178750的博客 6714

RK3588上跑通Zipformer语音识别的3个坑与填坑实录(附完整编译命令)

本文详细记录了在RK3588开发板上部署Zipformer语音识别模型时遇到的三个典型问题及其解决方案,包括静态库版本冲突、编译脚本配置错误以及模型转换精度调优。文章提供了完整的编译命令和实战步骤,帮助开发者快速在边缘设备上实现高效的语音识别应用。

l6m7n8的博客 715

[AUTOSAR通信篇] - AutoSAR通信架构

BSW层通信的三层架构,从上到下分别是通信服务、通信硬件抽象、通信驱动。

昂辉科技的博客 7623

TMF8801 ToF激光测距传感器原理图设计,已量产(距离传感器)

这张 TMF8801 小板的外围结构就很有代表性。核心传感器是 U1 TMF8801,但真正构成量产价值的是外围那一圈:U2 把 VCC 整理成 3V,R1/R2/R5 与 R3/R4/R6 两组 10K 电阻稳定默认态,Q2 2N7002 和 U3 SN74LVC2G07DCKR 处理控制链路,传感器边上还有 C1/C4/C5 三颗 100nF 紧贴去耦。

不脱发的程序猿 159

【保姆级教程】YOLOv8_OBB旋转目标检测:训练自己的数据集

【保姆级教程】YOLOv8_OBB旋转目标检测:训练自己的数据集

m0_51579041的博客 1万+

单工通信、半双工通信和全双工通信的区别

单工通信、半双工通信和全双工通信的区别

m0_46378271的博客 1万+

24. SAP 标准产品里使用 OData 服务的一些细节分享

笔者在编写使用事物码 SEGW 开发 SAP OData 服务的系列步骤时,但凡遇到技术上一些疑难问题,喜欢去参照 SAP 标准产品里是如何使用 OData 服务的,不少问题都可以去参考 SAP 标准产品的 OData 服务实现细节来解决。 因此本文记录笔者在编写本教程的过程中,曾经研究过的 SAP OData 服务实现的一些细节,把这些细节分享给大家,希望能起到参考作用。 同时,教程也不断收到一些朋友在评论区留言,对于不少留言的回复,我也是拿 SAP 标准 OData 服务的实现作为论据来回复的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2033

同步通信和异步通信

同步通信原理 同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。 采用同步通信时,将许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,在每组信息(通常称为帧)的开始要加上同步字符,在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙。在同步传输过程中,一个字符可以对应5~8位。当然,对同一个传输过程,所有字符对应同样的数位,比如说n位。这样,传输时,按每n位划分为一个时间片,发送端在一个时间片中发送一个字符,

u010783226的专栏 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

UVM--单向通信、双向通信、多向通信和通信管道

该小结主要记录了单向通信,双向通信,多向通信和通信管道的相关内容

创芯人--fly的博客 4090

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

I2C通信——I2C通信的理论介绍

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除 。

主要记录嵌入式学习与开发过程。 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Day1通信基本概念 通信系统模型 通信系统分类与通信方式

一、基本概念 (1)消息 信息 信号 1)消息:通信系统传输的对象,形式多种。 1.连续消息:语音、温度、图像。 2.离散消息:数据、文字、符号 2)信号:消息的电表示形式/传输载体 1.模拟信号:信号参量取值连续(无穷多,不可数),模拟信号有时也称为连续信号,这里连续的含义是指信号载荷的消息的参量连续变化,在某一取值范围内可以取无穷多的值,而不一定在时间上也连续。 2.数字信号:信号参量取值离散...

MrBlake的博客 1万+

浅析同步通信与异步通信

1. 概述 1.1 同步通信原理 同步通信: 发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(例如:在时钟信号的上升沿的时候,将数据发送出去)发送数据,接收端根据发送端提供的时钟信号,以及大家的约定,接收数据。如:I2C、SPI等有时钟信号的协议,都属于这种通信方式。 IIC: SPI: 同步通信中双方使用频率一致的时钟,它的数据分组比异步则大得多,称为一个数据帧。通过独特的 bit 串作为启停标识。发送方要以固定的节奏去发送数据,而接收方要时刻做好接收数据的准备,识别到前导码(同步字

暖暖_的_纠结的博客 6344

【Linux】进程间通信——管道通信

管道通信是一种进程间通信方式,允许相关进程之间通过管道进行数据传输。管道本质上是一个的数据流,写入数据的一端称为写端,读取数据的一端称为读端。

2301_79969994的博客 2193

同步通信方式与异步通信方式

同步通信方式        以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符表示,硬件要求高,通信双方须严格同步。 同步通信格式:数据以“块”为单位,一个数据块包括同步字符、数据及校验字符CRC。 通信连线通常采用三线制: SDA(信号线)、SCL(时钟线)、GND(地线) 优点是数据传输速率较高,常用作串行系统总线(内总线),如I2C、SPI、USB等;缺点...

ichigoooo_wu的博客 2万+
上一篇: 通信总结之一
下一篇: 通信总结之三:XMPP
过客青
博客等级 码龄17年 1粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值