socket通信

c#TCP传输文件

Deadly 提交于 2020-01-11 04:56:55
本文转载自: https://www.cnblogs.com/bianlan/archive/2012/08/10/2632349.html 作者:bianlan 转载请注明该声明。 TCP是一种面向连接的,可靠的,基于字节流的传输层通信协议。TCP建立一个连接需要三次握手,而终止一个连接要经过四次握手。一旦通信双方建立了TCP连接,连接中的任何一方都能向对方发送数据和接受对方发来的数据。TCP协议负责把用户数据(字节流)按一定的格式和长度组成多个数据报进行发送,并在接收到数据报之后按分解顺序重新组装和恢复传输的数据。 使用TCP传输文件,可以直接使用socket进行传输,也可以使用TcpLister类和TcpClient类进行传输。其实TcpLister和TcpClient就是Socket封装后的类,是.NET为了简化编程复杂度而对套接字又进行了封装。但是,TcpLister和TcpClient只支持标准协议编程。如果希望编写非标准协议的程序,只能使用套接字socket来实现。 下面分别讲解两种方法进行文件传输: 因为和一些终端进行文件传输时,受发送缓冲区最大发送字节的影响,我这里每次发送512字节,循环发送,直到把文件传输完,然后关闭连接;接收文件时,同样是每次接收512字节,然后写入文件,当所有的数据都接收完时,最后关闭连接。 当然,最后一次发送和接收的数据

如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?

懵懂的女人 提交于 2020-01-10 19:33:23
网络程序设计知识总结 网络相关工具 在网络相关的命令工具调研中我选取了 nslookup 作为案例。 详细可以参考 我的博客 nslookup作用 nslookup,全称是name server lookup,也就是域名查询。nslookup是一个用于查询Internet域名信息或者诊断DNS服务器问题的工具。 nslookup可以指定查询的类型,能够查询到DNS记录的生存时间,并且还能够在命令中使用参数指定使用哪个DNS服务器进行解释。 在已经安装了TCP/IP协议的电脑上均可以使用这个命令。 总结起来,nslookup命令主要用于查询DNS的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。 nslookup的应用场景 一般来说,我们在一台主机上配置好DNS服务器,添加了相应的记录之后,只要IP地址保持不变,一般情况下我们就不再需要去维护DNS的数据文件了。 不过在确认域名解释正常之前我们最好是测试一下所有的配置是否正常。许多人会简单地使用ping命令检查一下就算了。不过Ping指令只是一个检查网络连通情况的命令,虽然在输入的参数是域名的情况下会通过DNS进行查询,但是它只能查询A类型和CNAME类型的记录,而且只会告诉你域名是否存在,其他的信息一概欠奉。 所以如果你需要对DNS的故障进行排错就必须熟练另一个更强大的工具nslookup。 nslookup命令的使用

Socket通信

≡放荡痞女 提交于 2020-01-01 20:11:36
交互就是比较烦的,涉及的东西还是很多的 使用Socket通信,在局域网中还是比较合适的。 TCP的三次握手差不多也可以保证数据的正确性了,算是比较可靠的了 也参考了网络上其他的一些写法,自己写个测试下,可以通过。 服务器端: using UnityEngine; using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Collections.Generic; public class Server1 : MonoBehaviour { Socket serverSocket; Socket clientSocket; Thread clientThread; Thread t; // Use this for initialization void Start() { t = new Thread(new ThreadStart(OpenServer)); t.Start(); } // Update is called once per frame void Update() { } void OpenServer() { IPAddress ipAdr = IPAddress.Parse("127.0.0.1

用Python开发MySQL增强半同步BinlogServer(T1基础篇)

瘦欲@ 提交于 2019-12-23 11:27:29
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 导读 : 作者:曾永伟,知数堂10期学员,多年JAVA物流行业开发管理经验和PHP/Python跨境电商开发管理经验,对数据库系统情有独钟,善于运用SQL编程简化业务逻辑,去年开始正式从业MySQL DBA, 专注于DB系统自动化运维、MySQL云上实践。 本文为python-mysql-binlogserver系列的第一篇(T1基础篇) 概述 前不久知数堂吴老师在公开课上把MHA拉下神坛,是因为MHA无法从根本上解决丢数据的可能性,只是尝试性的去补偿未同步的数据。使用MySQL的半同步复制可以解决数据丢失的问题,但原生 io_thread 会破坏掉Master上的Binlog File的命名,对后继的运维造成不便,所以使用原生增强半同步+blackhole引擎做binlog备份的方案几乎没有人使用,而更多的公司则使用mysqlbinlog命令来实现轻量的BinlogServer,不足的是官方mysqlbinlog并不支持半同步复制,仍然会丢数据。 据我所知,Facebook,Google和国内的美团公司都有研发自己的BinlogServer,但是目前我没有找到一个开源的支持半同步的BinlogServer项目,于是就诞生了 py-mysql-binlogserver 这个项目。 1、主要特性如下:

Android蓝牙操作笔记

情到浓时终转凉″ 提交于 2019-12-20 03:28:53
蓝牙是一种支持设备短距离传输数据的无线技术。android在2.0以后提供了这方面的支持。 从查找蓝牙设备到能够相互通信要经过几个基本步骤(本机做为服务器): 1.设置权限 在manifest中配置 Xml代码 < uses-permission android:name= "android.permission.BLUETOOTH" /> < uses-permission android:name= "android.permission.BLUETOOTH_ADMIN" /> 2.启动蓝牙 首先要查看本机是否支持蓝牙,获取BluetoothAdapter蓝牙适配器对象 Java代码 BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if(mBluetoothAdapter == null){ //表明此手机不支持蓝牙 return; } if(!mBluetoothAdapter.isEnabled()){ //蓝牙未开启,则开启蓝牙 Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableIntent, REQUEST

[Android]蓝牙基本操作

女生的网名这么多〃 提交于 2019-12-19 23:31:13
蓝牙是一种支持设备短距离传输数据的无线技术。android在2.0以后提供了这方面的支持。 从查找蓝牙设备到能够相互通信要经过几个基本步骤(本机做为服务器): 1.设置权限 在manifest中配置 Xml代码 <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 2.启动蓝牙 首先要查看本机是否支持蓝牙,获取BluetoothAdapter蓝牙适配器对象 Java代码 BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if(mBluetoothAdapter == null){ //表明此手机不支持蓝牙 return; } if(!mBluetoothAdapter.isEnabled()){ //蓝牙未开启,则开启蓝牙 Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableIntent, REQUEST_ENABLE_BT)

Android socket通信

丶灬走出姿态 提交于 2019-12-19 06:29:58
/** * 客户端 */ public final class SubsetSocket { private static SubsetSocket instance; private StringBuffer stringBuffer = new StringBuffer(); private SubsetSocket() { } public static SubsetSocket getInstance() { if (instance == null) { synchronized (SubsetSocket.class) { if (instance == null) { instance = new SubsetSocket(); instance.connect(); } } } return instance; } private Vector<String> queue = new Vector<>(); private ExecutorService singleSendDataThread = Executors.newSingleThreadExecutor(); private ExecutorService singleConnectThread = Executors.newSingleThreadExecutor(); private boolean

服务网格数据平面的关键:层层剖析Envoy配置

旧巷老猫 提交于 2019-12-18 17:07:12
Envoy是一种高性能C++分布式代理,专为单个服务和应用程序设计。作为Service Mesh中的重要组件,充分理解其配置就显得尤为重要。本文列出了使用Envoy而不用其他代理的原因。并给出了Envoy及其服务的配置,然后对其进行详细解读,帮助读者理解其配置,从而掌握Envoy。 服务网格是微服务设置中的通信层,也就是说往返于每个服务的所有请求都通过网格。服务网格在微服务设置中也成为基础架构层,它能够让服务之间的通信变得安全可靠。关于Service Mesh的基础内容,我们已经在 这篇文章 中详细介绍过。 每一个服务都有自己的代理服务(sidecars),然后所有代理服务一起形成服务网格。Sidecars处理服务之间的通信,也就是说所有的流量都会通过网格并且该透明层可以控制服务之间如何交互。 服务网格通过由API控制的组件提供可观察性、服务发现以及负载均衡等。 实际上,如果一个服务要调用另一个服务,它不会直接调用目标服务。而是先将请求路由到本地代理,然后代理再将该请求路由到目标服务。这一过程意味着服务实例不会和其他服务直接接触,仅与本地代理进行通信。 根据ThoughtWorks Technology Radar(这是一份半年度的文档,用于评估现有技术和新生技术的风险和收益)指出,“服务网格提供一致的发现、安全性、跟踪(tracing)、监控以及故障处理,而无需共享资源

服务网格数据平面的关键:层层剖析Envoy配置

时光总嘲笑我的痴心妄想 提交于 2019-12-18 11:08:59
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Envoy是一种高性能C++分布式代理,专为单个服务和应用程序设计。作为Service Mesh中的重要组件,充分理解其配置就显得尤为重要。本文列出了使用Envoy而不用其他代理的原因。并给出了Envoy及其服务的配置,然后对其进行详细解读,帮助读者理解其配置,从而掌握Envoy。 服务网格是微服务设置中的通信层,也就是说往返于每个服务的所有请求都通过网格。服务网格在微服务设置中也成为基础架构层,它能够让服务之间的通信变得安全可靠。关于Service Mesh的基础内容,我们已经在 这篇文章 中详细介绍过。 每一个服务都有自己的代理服务(sidecars),然后所有代理服务一起形成服务网格。Sidecars处理服务之间的通信,也就是说所有的流量都会通过网格并且该透明层可以控制服务之间如何交互。 服务网格通过由API控制的组件提供可观察性、服务发现以及负载均衡等。 实际上,如果一个服务要调用另一个服务,它不会直接调用目标服务。而是先将请求路由到本地代理,然后代理再将该请求路由到目标服务。这一过程意味着服务实例不会和其他服务直接接触,仅与本地代理进行通信。 根据ThoughtWorks Technology Radar(这是一份半年度的文档,用于评估现有技术和新生技术的风险和收益)指出,“服务网格提供一致的发现

VisualVM分析与HelloWorld、springBoot项目

不问归期 提交于 2019-12-17 04:13:26
VisualVM分析与HelloWorld、springBoot项目 自从1995年第一个JDK版本JDKBeta发布,至今已经快25年,这些年来Java的框架日新月异,从最开始的Servlet阶段,到SSH,SSI,SSM,springboot等,还有一些其他方向的框架微服务SpringCloud、响应式编程Spring Reactor。零零总总 的框架,我们都需要去熟悉,那么怎么去快速熟悉呢,我觉得可以看源码,可以看博客,也可以根据内存分配去完善理解。 那么问题来了,一个Java项目在咱们平时启动项目的时候,究竟发生了什么,创建几个简单的项目,用VisualVM来分析一下~ Main 简单的项目,应该没有比HelloWorld更简单的了吧,按照老规矩,咱们就从HelloWorld开始分析!那么简单的项目大家都能闭着眼睛敲出来,是不是没分析的必要啊,别着急,写好HelloWorld咱们开始分析: System.out.println("HelloWorld start"); // 这里让线程睡一会,方便分析 Thread.sleep(100000); System.out.println("HelloWorld end"); 运行main方法,打开VisualVM,发现事情并不简单哦,这个简单的项目有十六个线程维护,其中守护线程有十五个。 其中几大线程的内存分配情况如下: