socket通信

MySQL通讯协议(3)连接阶段

痴心易碎 提交于 2020-04-06 06:08:54
[TOC] MySQL通讯协议(3)连接阶段 MySQL 连接生命周期 graph TD A[开始] --> |连接|B(ConnectionState) B --> |认证成功|C(CommandState) C --> |复制命令|D(ReplicationMode) B --> |复制命令|D B --> |错误或断开|End C --> |关闭连接|End D --> |关闭连接|End[结束] MySQL连接是有状态的,当服务接通后,首先会进入连接状态,进行认证,如交换信息、认证账号密码等。认证成功后,进入命令阶段,提交命令接受响应。同时,在连接阶段和命令阶段受到复制命令,都可以进入复制模式。 连接阶段 连接阶段主要做三件事: 交换客户机和服务器的支持的功能 如果需要,设置SSL通信通道 服务器对客户端进行身份认证 Plain Handshake 1, Initial Handshake Packet 连接建立之后,服务端先发送初始握手包。以最新的HandshakeV10为例: Type Name Description int<1> protocol version 协议版本:10 string[NUL] server version 易读的服务器版本 int<4> thread id 连接id string[8] auth-plugin-data-part-1

心跳包机制设计详解 转载

北慕城南 提交于 2020-03-21 10:53:15
转载: https://mp.weixin.qq.com/s?__biz=MzU2MTkwMTE4Nw==&mid=2247487168&idx=1&sn=e1cc38cae47b0ea86d66d64cb081e8a3&chksm=fc70f52ccb077c3a42b4c51919bec6b77a9a26bee7840a8a5529c286f7430ecfd56e65eb133d&scene=21#wechat_redirect 存在下面两种情形: 情形一 :一个客户端连接服务器以后,如果长期没有和服务器有数据来往,可能会被防火墙程序关闭连接,有时候我们并不想要被关闭连接。例如,对于一个即时通讯软件,如果服务器没有消息时,我们确实不会和服务器有任何数据交换,但是如果连接被关闭了,有新消息来时,我们再也没法收到了,这就违背了“即时通讯”的设计要求。 情形二 :通常情况下,服务器与某个客户端一般不是位于同一个网络,其之间可能经过数个路由器和交换机,如果其中某个必经路由器或者交换器出现了故障,并且一段时间内没有恢复,导致这之间的链路不再畅通,而此时服务器与客户端之间也没有数据进行交换,由于 TCP 连接是状态机,对于这种情况,无论是客户端或者服务器都无法感知与对方的连接是否正常,这类连接我们一般称之为“死链”。 情形一 中的应用场景要求必须保持客户端与服务器之间的连接正常

Android开发中蓝牙应用开发

ε祈祈猫儿з 提交于 2020-03-21 05:50:29
安卓开发中蓝牙应用也是比较常见的,那么现在整理下了蓝牙开发中的应用,现在来看安卓蓝牙开发浅析:   1. 使用蓝牙的响应权限   <uses-permission android:name="android.permission.BLUETOOTH" />   <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />   2. 配置本机蓝牙模块   在这里首先要了解对蓝牙操作一个核心类BluetoothAdapter   BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();   //直接打开系统的蓝牙设置面板   Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);   startActivityForResult(intent, 0x1);   //直接打开蓝牙   adapter.enable();   //关闭蓝牙   adapter.disable();   //打开本机的蓝牙发现功能(默认打开120秒,可以将时间最多延长至300秒)   discoverableIntent.putExtra(BluetoothAdapter.EXTRA

Android蓝牙聊天,蓝牙通讯

﹥>﹥吖頭↗ 提交于 2020-03-17 08:10:40
由于近期开发Android相关的东西,借鉴了一些源码和别人的博客,现将Android蓝牙通信方式在这里总结一下,以下是以一个蓝牙客户端和服务端实现的例子来给大家讲解一下。 1. 使用蓝牙的响应权限 2. 配置本机蓝牙模块 在这里首先要了解对蓝牙操作一个核心类BluetoothAdapter BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); //直接打开系统的蓝牙设置面板 Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(intent, 0x1); //直接打开蓝牙 adapter.enable(); //关闭蓝牙 adapter.disable(); //打开本机的蓝牙发现功能(默认打开120秒,可以将时间最多延长至300秒) discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);//设置持续时间(最多300秒)Intent discoveryIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE)

C# TCP多线程服务器示例

偶尔善良 提交于 2020-03-14 21:54:49
前言 之前一直很少接触多线程这块。这次项目中刚好用到了网络编程TCP这块,做一个服务端,需要使用到多线程,所以记录下过程。希望可以帮到自己的同时能给别人带来一点点收获~ 关于TCP的介绍就不多讲,神马经典的三次握手、四次握手,可以参考下面几篇博客学习了解: TCP三次握手扫盲 效果预览 客户端是一个门禁设备,主要是向服务端发送实时数据(200ms)。服务端解析出进出人数并打印显示。 实现步骤 因为主要是在服务器上监听各设备的连接请求以及回应并打印出入人数,所以界面我设计成这样: 可以在窗体事件中绑定本地IP,代码如下:        //获取本地的IP地址 string AddressIP = string.Empty; foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList) { if (_IPAddress.AddressFamily.ToString() == "InterNetwork") { AddressIP = _IPAddress.ToString(); } } //给IP控件赋值 txtIp.Text = AddressIP; 首先我们需要定义几个全局变量 Thread threadWatch = null; // 负责监听客户端连接请求的 线程;

alibaba远程调用框架dubbo原理

隐身守侯 提交于 2020-03-11 04:32:51
alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo、hsf),jms消息服务(napoli、notify),KV数据库(tair)等。这个框架/工具/产品在实现的时候,都考虑到了容灾,扩展,负载均衡,于是出现一个配置中心(ConfigServer)的东西来解决这些问题。 基本原理如图: 在我们的系统中,经常会有一些跨系统的调用,如在A系统中要调用B系统的一个服务,我们可能会使用RMI直接来进行,B系统发布一个RMI接口服务,然后A 系统就来通过RMI调用这个接口,为了解决容灾,扩展,负载均衡的问题,我们可能会想很多办法,alibaba的这个办法感觉不错。 本文只说dubbo,原理如下: ConfigServer 配置中心,和每个Server/Client之间会作一个实时的心跳检测(因为它们都是建立的Socket长连接),比如几秒钟检测一次。收集每个Server提供的服务的信息,每个Client的信息,整理出一个服务列表,如: serviceName serverAddressList clientAddressList UserService 192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4 172.16.0.1,172.16.0.2 ProductService 192.168.0.3

Android Socket通信

纵然是瞬间 提交于 2020-03-04 22:22:35
目标 Demo是通过Java ServerSocket 和 Socket 通信实现客户端 发送消息 和 发送文件 到服务器,服务器接收到 消息和文件 ,并且实现解决 inputStream.read() 的 阻塞 问题思路。 服务器端 创建ServerSocket服务器 serverSocket = new ServerSocket(port);//首先创建一个服务端口 //等待客户端的连接请求 socket = serverSocket.accept(); 等待Socket客户端连接 //等待客户端的连接请求 socket = serverSocket.accept(); final String socketAddress = socket.getRemoteSocketAddress().toString(); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(ServerActivity.this, "成功建立与客户端的连接 : " + socketAddress, Toast.LENGTH_SHORT).show(); Log.i("Lin", "成功建立与客户端的连接 : " + socketAddress); } }); 接收Socket客户端信息 为了防止接收消息时

关于 socket 通信

自古美人都是妖i 提交于 2020-03-04 19:28:11
**WebServer** package com . tools . payhelper ; import android . content . Context ; import android . text . TextUtils ; import android . util . Log ; import com . tools . payhelper . utils . AbSharedUtil ; import com . tools . payhelper . utils . BitmapUtil ; import com . tools . payhelper . utils . DBManager ; import com . tools . payhelper . utils . OrderBean ; import com . tools . payhelper . utils . PayHelperUtils ; import com . tools . payhelper . utils . QrCodeBean ; import fi . iki . elonen . NanoHTTPD ; import fi . iki . elonen . NanoHTTPD . IHTTPSession ; import fi . iki . elonen .

Socket通信的实现

匆匆过客 提交于 2020-03-03 06:55:16
使用Socket通信需要在AndroidManifest中声明以下权限: < uses-permission android: name = " android.permission.INTERNET " /> < uses-permission android: name = " android.permission.ACCESS_NETWORK_STATE " /> 其次是不能在主线程中访问网络,因为网络操作很可能是耗时的,从而抛出异常(android.os.NetworkOnMainThreadException)。因此创建socket连接,发送/接收消息都需要在线程中进行,消息UI更新可以使用handle实现。 聊天室实现 在远程Service建立一个TCP服务,在主界面中连接TCP服务,连接上之后服务端与多个客户端响应。 服务端的代码实现: 通过判断服务端输入流的返回值,当客户端断开连接后,服务端的输入流会返回null,这时就知道客户端已经退出。 public class TCPServerService extends Service { public final static String TAG = TCPServerService . class . getSimpleName ( ) ; private boolean mIsServiceDestroyed =

Nodejs网络通讯

本小妞迷上赌 提交于 2020-03-03 00:55:43
Node.js 网络通信 Node 是一个面向网络而生的平台,它具有事件驱动、无阻塞、单线程等特性,具备良好的可伸缩性,使得它十分轻量,适合在分布式网络中扮演各种各样的角色。同时 Node 提供的 API 十分贴合网络,适合用它基础的 API 构建灵活的网络服务。本课程的内容就是给大家介绍 Node 在网络通信编程方面的具体能力。 利用 Node 可以十分方便的搭建网络服务器。在 Web 领域,大多数的编程语言需要专门的 Web 服务器作为容器,如 ASP、ASP.NET 需要 IIS 作为服务器,PHP 需要打在 Apache 或 Nginx 环境等,JSP 需要 Tomcat 服务器等。但对于 Node 而言,只需要几行代码即可构建服务器,无需额外的容器。 Node 提供了 net、dgram、http、https 这4个模块,分别用于处理 TCP、UDP、HTTP、HTTPS,适用于服务器端和客户端。 网络通信相关概念 我们每天使用互联网,你是否想过,它是如何实现的? 全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗? 互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite)。它们对电脑如何连接和组网,做出了详尽的规定