使用.net core在Ubuntu构建一个TCP服务器
介绍和背景TCP编程是网络编程领域最有趣的部分之一。在Ubuntu环境中,我喜欢使用.NETCore进行TCP编程,并使用本机Ubuntu脚本与TCP服务器进行通信。以前,我在.NET框架本身写了一篇关于TCP服务器和客户端的文章。现在,.NET框架本身将是开源的。我想写一些关于他们之间的沟通渠道。基本上,我只是测试在新的.NET环境下工作的情况,而不是在旧的.NET框架环境中工作。然而,在这篇文章中,我有一大堆的额外功能可供你使用。我将向您展示您将使用的方法来构建自己的TCP服务器,使用.NET核心程序集以及如何通过网络与他们进行通信。对于客户端应用程序,我不会构建任何东西。相反,我将使用允许通过TCP和UDP协议进行通信的本地脚本。议程是这样的:构建和托管一个内置.NETCore的TCP服务器启动请求并使用TCP客户端本机脚本将文本数据和文件数据发送到服务器。这些是我会在这篇文章中引导你的一些东西,我也会澄清一切的目的。我们不打算在这里建立任何特殊的应用程序,但是TCP是传输层中使用最广泛的协议(与UDP相反)
.NET Core跨平台的奥秘(上)
微软推出的第一个版本的.NETFramework是一个面向Windows桌面和服务器的基础框架,在此之后,为此微软根据设备自身的需求对.NETFramework进行裁剪,不断推出了针对具体设备类型的.NETFramework版本以实现针对移动、平板和嵌入式设备提供支持。除此之外,在Windows平台之外一致游荡着一只特立独行的猴子(Mono)。.NET平台看起来欣欣向荣,而实际上却日薄西山,就在这个时候微软走了一条唯一正确的道路,那就是基于跨平台理念重新设计的.NETCore,以及由此驱动地对整个.NET平台进行全新布局。.NETCore跨平台的奥秘[上篇]:历史的枷锁.NETCore跨平台的奥秘[中篇]:复用之殇.NETCore跨平台的奥秘[下篇]:全新的布局对于计算机从业人员来说,“平台(Platform)”是一个我们司空见惯的词语,在不同的语境中它具有不同的语义,比如它可以指代操作系统环境和CPU架构类型,也可以表示硬件设备类型。经过多年的苦心经营,微软已经为在Windows平台下构建了一个完整的支持多种设备的
微软在C# 8中引入预览版可空引用类型
微软已经为开发者提供了预览版的可空引用类型(NullableReferenceType),想尝鲜的开发者可以尝试这个新特性,并提供反馈。预览版可空引用类型是VisualStudio201715.5Preview4+的Roslyn扩展,现在支持.NET框架,很快也将支持.NETCore。该特性在C#8中是默认启用的。微软为此提供了安装指南。在C#8中引入新的可空引用类型是为了解决十亿美元问题(BillionDollarMistake)。1965年,英国计算机科学家TonyHoare在开发ALGOL时称其为空引用(NullReference)。指针最主要的问题是,有时候它们会为空,而这并非我们所期望的。在将空指针作为一种特性引入之后,反而变成产生bug的主要源头。早在2011年,用户就在VisualStudioUserVoice里要求“在C#中引入不可空引用类型”,一年之后,经过投票,该需求排到了第15位,现在已经跑到了第一的位置上。这个特性之所以在很长一段时间内都无法实现
这应该是目前最快速有效的ASP.NET Core学习方式(视频)
ASP.NETCore都2.0了,它的普及还是不太好。作为一个.NET的老司机,我觉得.NETCore给我带来了很多的乐趣。Linux,Docker,CloudNative,MicroService,DevOps这些都能跟它很完美的结合,再加ASP.NETCore轻量、模块化、以及现代化的结构设计让人不喜欢都难。上次写了这篇极简版ASP.NETCore学习路径之后,有人提出能不能提供所有知识点的链接,我觉得也那是极好的,但是为什么不玩点新鲜的呢?所以,我录了这一系列的视频教程(的前两章.....),你可以到我的视频网站video.jessetalk.cn上去免费观看(点击页面左下角原文即可)。视频内容全系列一共分为七章,每章被切分为5-10个小节,每节会限制在5分钟左右。所有不会有啰嗦和寒暄,只讲对你有用的。初探配置依赖注入HTTP核心CoreMVC认证授权由于录音的时候语速慢,所以我默认将视频的速度调快到了1.25X,呵呵,那声音听起来怪怪的。别说会打嗜睡,可能听了你会
用动画的方式画出任意的路径(直线、曲线、折现)
WPF/UWP中提供的Path类可以为我们绘制几乎所有可能的矢量图形。但是,如果这些矢量图形可以以动画的形式播放出来,那将可以得到非常炫酷的演示效果。我用Blend画了我的名字:
手工搭建基于ABP的框架(3) - 登录,权限控制与日志
本篇将实现登录、权限控制、日志配置与审计日志的功能。首先我们先实现登录功能,在登录的基础上,通过控权使得只有ID为1988的用户才能创建tweet。最后配置Log4Net日志,并开启审计日志,记录所有Web请求。简单的界面为了测试方便,在实现登录功能之前,先简单实现了几个页面:Tweets列表页面创建tweet页面登录页面页面代码没有什么特别的,这里就不赘述了。登录我们不希望所有人都能创建tweet,而是只有已登录的用户才能创建。本小节将实现登录功能,限制创建tweet页面只有已登陆用户才能访问。首先在Web.config的system.web里加上这段配置:然后设置首页和登录页面可以匿名访问。给Home/Index和Account/Login这两个Action加上AllowAnonymous特性。[AllowAnonymous]publicActionResultIndex()[AllowAnonymous]publicActionResult
Winform界面中主从表编辑界面的快速处理
在Winform开发中,我们往往除了常规的单表信息录入外,有时候设计到多个主从表的数据显示、编辑等界面,单表的信息一般就是控件和对象实体一一对应,然后调用API保存即可,主从表就需要另外特殊处理,本随笔介绍如何快速实现主从表编辑界面的处理,结合GridControl控件的GridView控件对象,实现数据在列表中的实时编辑,非常方便。1、主从表的界面设计及展示主从表一般涉及两个以上的表,一个是主表,其他的是从表的,在实际情况下,一般包含两个表较多,我们这里以两个表的主从表关系进行分析处理。例如我们建立两个报销申请单表关系如下所示。对于报销的主从表信息,我们可以在列表中进行展示,如下界面所示,分为两部分:一部分是主表信息,一部分是从表信息,单击主表信息后,显示对应从表的列表信息。那么我们新增一条主表记录的时候,那么可以弹出一个新的界面进行数据的维护处理,方便我们录入主从表的信息,界面如下所示。上面界面包括了主表信息,以及从表的信息(在GridView中实时录入)两部分,这样填写后统一进行提交处理。2、主从表编辑界
.NET Core工程编译事件$(TargetDir)变量为空引发的思考
前言最近客户反馈,为啥不用xcopy命令代替我自己写的命令来完成插件编译复制:我的:
MONO产品分析报告
本文主要是就MONO这款app对内容筛选型app的冰山一角进行剖析,观察其中的优点以及局限。在这个快节奏生活的信息爆炸时代,我们每时每刻都在或主动或被动的接受信息。“低头族”似乎已经成了一种常态。如何快速的获取对自己有效的信息,避免垃圾信息,是我们增加见解,节约时间的一种手段。对于设计越来越人性化的设定,现在部分app会也会帮助我们筛选内容。如何通过算法来“猜你喜欢”,以及保证优质内容,是app人性化开发的第一位。用户的关注点不在于信息多,而在于信息精。MONO是一款根据个人喜好与兴趣来订阅内容的平台,我就MONO这款app进行分析,对内容筛选型app的冰山一角进行剖析,观察其中的优点以及局限。体验环境:iphone5s,ios10.3.3使用工具:office,Xmind,EdrawMax。参考资料:MONOapp详情页,腾讯位置大数据数据资源:友盟,蝉大师,易观千帆,应用雷达。一、产品介绍内容筛选型的app的产品定位一定要尖锐。“内容筛选”本身需要我们在众多信息流中进行“主题筛选”,太多的主题就会存在信息筛选不及时,
通过 Visual Studio 的“代码度量值”来改进代码质量
1软件度量值指标1.1可维护性指数表示源代码的可维护性,数值越高可维护性越好。该值介于0到100之间。绿色评级在20到100之间,表明该代码具有高度的可维护性;黄色评级在10到19之间,表示该代码适度可维护;红色评级在0至9之间,表示低可维护性。1.2圈复杂度它是通过计算程序流中不同代码路径的数量来创建的,用来表示一个程序的复杂性。具有复杂控制流的程序需要更多的测试才能获得良好的代码覆盖率,并且不易维护。以下两种情况会在计算圈复杂度时加1:分支(if、while、do)switch中的case语句例如://圈复杂度1publicvoidMethod(){Console.WriteLine("HelloWorld!");}//圈复杂度3publicvoidMethod(boolcondition1,boolcondition2){if(condition1||condition2){Console.WriteLine("HelloWorld!");}}//圈复杂度8publicvoidMethod(
微软.Net CLR,速度和可伸缩性均会提高
微软的公共语言运行时正在进行一系列的改造,公司宣布这个改造计划将使CLR更加高效、可扩展性更强。微软的C#首席设计师MadsTorgersen表示,这个计划的关键在于对CLR中间语言,即IL。IL10年都没有升级了。微软希望通过改进IL,使CLR为更多的编程语言所用。CLR的目标是高效运行.Net程序。微软首席软件工程师BenWatson表示,目前.Net的最大问题是运行时自身可伸缩性的固有限制,CLR正在超越设计初衷。Watson解释说,当多重字节的代码被加载时,CLR内置算法就会开始崩溃。目前下一步的改进涉及Span,这是一种新的类型,将提供用于实现更安全、更高性能、低级别代码的语言和框架功能。Span中的t表示类型参数。Torgersen说,Span将被C#和其他语言用来创建更高效的代码,不需要复制大量数据、不需要暂停垃圾收集。CLR的新版本将会有关于Span的内部知识来提高速度。Span将在接下来几个版本的.NetFramework中推出。
[C#源代码]使用SCPI指令对指定通信端口(RS232/USB/GPIB/LAN)的仪器编程
本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢!本软件是基于NI-VISA/VISA32(VirtualInstrumentSoftwareArchitecture)的仪器编程,支持RS232、USB、GPIB及LAN通信的SCPI仪器编程。一、本软件是使用VS2017开发(也可以使用VS2015打开,但有些特性可能不支持),基于DotnetFrameWork4.0,如需运行该软件,从以下网站下载:软件下载地址:点击此处下载二、需要开发该软件,必须安装VISA-Runtime运行时如下图所示:软件下载地址:点击此处下载或者到NI官方网站(http://www.ni.com)下载最新的VISA-Runtime三、通过RS232、USB、GPIB及LAN并使用SCPI指令对仪器进行通信,如下图:如不懂SCPI指令,请执行进行百度。四、软件源代码:https://github.com/cnxy/VISAInstrument请自行克隆C#源代码或
CSharpGL(47)你好,Framebuffer!
CSharpGL(47)你好,Framebuffer!Framebuffer对象(FBO)是一种复杂的OpenGL对象。使用自定义的framebuffer,可以实现离屏渲染,进而实现很多高级功能,例如阴影。下载CSharpGL已在GitHub开源,欢迎对OpenGL有兴趣的同学加入(https://github.com/bitzhuwei/CSharpGL)FBO基本结构【注:本节(FBO基本结构)是翻译的(https://www.khronos.org/opengl/wiki/Framebuffer_Object),略有修改。】类似其它的OpenGL对象,FBO也有一套glGen,glDelete,glBind的API。FBO这套API里的target可接受3种值:GL_FRAMEBUFFER,GL_READ_FRAMEBUFFER或GL_DRAW_FRAMEBUFFER。后两种允许你可以让读操作(glReadPixels等)和写操作(所有的渲染命令)发生到不同的FBO上。GL_FRAMEBUFFE
wpf PreviewTextInput 在鼠标输入获得 \u0003
我的小伙伴在写一个功能,需要获得输入的时候,判断是键盘输入或鼠标输入,通过PreviewTextInput获得键盘输入就做一些输出。但是他发现,在使用鼠标书写的时候,获得PreviewTextInput,而且值是\u0003,他换了一个电脑就好了。在头像大神的研究下,发现有道词典会拿到输入框的事件,在鼠标指向的词进行翻译。所以他就给TextBox发送了\u0003。解决方法是去掉\u0003或者关闭有道词典。如果你发现这个问题,那么尝试关闭有道词典和其他的软件,如果已经解决,就是他们的坑。但是从我国的法律规定,是不可以在软件把其他软件干掉。所以网易太厉害了,现在也没有什么方法。或者检测到有道词典就告诉用户,因为技术有限,不能在开启有道词典使用软件。在这之前需要说的,因为我的这个鼠标被windows识别为键盘,于是就找了很久,都在想如何判断一个键盘是什么设备,所以,如果发现自己的软件出现意外的输入,那么先关闭有道。
.NET Core跨平台:复用之殇
在《.NETCore跨平台的奥秘[上篇]:历史的枷锁》中我们谈到:由于.NET是建立在CLI这一标准的规范之上,所以它天生就具有了“跨平台”的基因。在微软发布了第一个针对桌面和服务器平台的.NETFramework之后,它开始“乐此不疲”地对这个完整版的.NETFramework进行不同范围和层次的“阉割”,进而造就了像WindowsPhone、WindowsStore、Silverlight和.NETMicroFramework的压缩版的.NETFramework。从这个意义上讲,Mono和它们并没有本质的区别,唯一不同的是Mono真正突破了Windows平台的藩篱。包括Mono在内的这些分支促成了.NET的繁荣,但我们都知道这仅仅是一种虚假的繁荣而已。虽然都是.NETFramework的子集,但是由于它们采用完全独立的运行时和基础类库,这使我们很难开发一个支持多种设备的“可移植(Portable)”应用,这些分支反而成为制约.NET发展的一道道枷锁。至于为什么“可移植(Portable)”.NET应用的开发如此繁琐
Realm发布Realm .NET,扩展支持.NET技术栈
继去年夏天Realm引入对.NETCore的支持,使开发者可以用C#来构建移动应用之后,Realm发布了Realm.NET。Realm.NET是一个可以让开发者更好地集成他们的.NET技术栈的新组件集。其中一个组件,是针对.NET的GlobalNotifier,可以实现大规模数据变动的高效分配。另外一个组件,为UniversalWindowsPlatform增加Realm的实时同步和数据加密功能。还有一个组件,是Realm和MicrosoftSQLServer之间的双向数据连接器。据Realm称,他们针对.NET的GlobalNotifier进行了优化,可以观测大规模数据变动,并及时通知对这些变动感兴趣的客户。激活GlobalNotifier的关键是实现INotificationHandler接口,这个接口定义了2个基础方法:ShouldHandle,用来指定客户端希望观测的Realm路径。HandleChangesAsync,被触发来来处理观测到的变化;事实上,这个方法
ASP.NET Core 认证与授权[5]:初识授权
经过前面几章的姗姗学步,我们了解了在ASP.NETCore中是如何认证的,终于来到了授权阶段。在认证阶段我们通过用户令牌获取到用户的Claims,而授权便是对这些的Claims的验证,如:是否拥有Admin的角色,姓名是否叫XXX等等。本章就来介绍一下ASP.NETCore的授权系统的简单使用。目录简单授权在ASP.NET4.x中,我们通常使用Authorize过滤器来进行授权,它可以作用在Controller和Action上面,也可以添加到全局过滤器中。而在ASP.NETCore中也有一个Authorize特性(但不是过滤器),用法类似:[Authorize]//Controller级别publicclassSampleDataController:Controller{[Authorize]//Action级别publicIActionResultSampleAction(){}}IAllowAnonymous在ASP.NET4.x中,我们最常用的另一个特性便是AllowAnonymo
【技术分享】SpookFlare: 黑暗中前行
2017-11-2110:00:00阅读:560次来源:artofpwn.com作者:Kp_sover译者:Kp_sover预估稿费:200RMB投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿Windows与安全Windows作为最成功和市场占有率最高的操作系统,也承载了各种各样的安全产品,下面是2017年8月份NetMarketShare的一份报告,给出了操作系统市场份额情况,当然,任何一款操作系统伴随着它更高的使用率,随之而来的肯定也会成为更多攻击者的目标,这意味着更多的安全产品会被用于这些操作系统中,并且这些安全产品必须不断改进自己以避免要保护的系统受到攻击。安全产品检测Windows作为最常用的操作系统,它经常充当着渗透测试者的目标。如果你打算侵入/渗透Windows操作系统,Meterpreter会是你最常用的RAT,因为它可以和Metasploit充分的结合起来。Meterpreter不仅被用于合法的目的,更多的时候是非法的,这意味着,Meterpr
ASP.NET Core缓存静态资源
背景缓存样式表,JavaScript或图像文件等静态资源可以提高您网站的性能。在客户端,总是从缓存中加载一个静态文件,这样可以减少对服务器的请求数量,从而减少获取页面及其资源的时间。在服务器端,由于它们的请求较少,服务器可以处理更多的客户端而无需升级硬件。虽然缓存是一件好事,但您必须确保客户端始终运行最新版本的应用程序。当您部署下一个版本的网站时,您不希望客户端使用过时的缓存版本的文件。方案:为确保用户始终使用最新版本的文件,我们必须为每个文件版本提供一个唯一的URL。有很多策略:使用查询字符串:http://sample.com/file.js?v=123重命名文件:http://sample.com/file.123.js创建一个目录:http://sample.com/123/file.jsASP.NETCore提供了一种使用TagHelper来追加版本与查询字符串的机制。它支持以静态资源为目标的最常见的HTML标签:script,link和img。所有你需要做的是在对应H
C#设计模式之十五命令模式(Command Pattern)【行为型】
一、引言今天我们开始讲“行为型”设计模式的第二个模式,该模式是【命令模式】,又称为行动(Action)模式或交易(Transaction)模式,英文名称是:CommandPattern。还是老套路,先从名字上来看看。“命令模式”我第一次看到这个名称,我的理解是,可能是一种行为或者一个操作就是一个命令。“命令”这个词语在军队里面用的最多,比如:下达作战命令,接下来就是上战场玩命了。基于这些,我感觉“命令”就是任务,执行了命令就完成了一个任务。或者说,命令是任务,我们再从这个名字上并不知道命令的发出者和接受者分别是谁,为什么呢?因为我们并不关心他们是谁,发出命令的人发出命令,可以继续做其他的事情,接受命令的人执行任务就可以,不需要你发出命令,还要监督我们完成,只要我们完成任务是合格的就行。这种行为也就是“解耦”。在我们的现实生活中有很多例子可以拿来说明这个模式,我们还拿吃饺子这个事情来说。我的奶奶说了,今天想吃饺子,发出了命令,然后我奶奶就去看电视去了。我们夫妻俩收到命令就开始和面,做饺子馅,包饺子。饺子包好了,我们就休息一会,等下午5点就开