首先要理解基本的原理,2台电脑间实现TCP通讯,首先要建立起连接,在这里要提到服务器端与客户端,两个的区别通俗讲就是主动与被动的关系,两个人对话,肯定是先有人先发起会话,要不然谁都不讲,谈什么话题,呵呵!一样,TCPIP下建立连接首先要有一个服务器,它是被动的,它只能等待别人跟它建立连接,自己不会去主动连接,那客户端如何去连接它呢,这里提到2个东西,IP地址和端口号,通俗来讲就是你去拜访某人,知道了他的地址是一号大街2号楼,这个是IP地址,那么1号楼这么多门牌号怎么区分,嗯!门牌号就是端口(这里提到一点,我们访问网页的时候也是IP地址和端口号,IE默认的端口号是80),一个服务器可以接受多个客户端的连接,但是一个客户端只能连接一台服务器,在连接后,服务器自动划分内存区域以分配各个客户端的通讯,那么,那么多的客户端服务器如何区分,你可能会说,根据IP么,不是很完整,很简单的例子,你一台计算机开3个QQ,服务器怎么区分?所以准确的说是IP和端口号,但是客户端的端口号不是由你自己定的,是由计算机自动分配的,要不然就出现端口冲突了,说的这么多,看下面的这张图就简单明了了。
在上面这张图中,你可以理解为程序A和程序B是2个SOCKET程序,服务器端程序A设置端口为81,已接遭到3个客户端的连接,计算机C开了2个程序,分别连接到E和D,而他的端口是计算机自动分配的,连接到E的端口为789,连接到D的为790。
了解了TCPIP通讯的基本结构后,接下来讲解建立的流程,首先声明一下我用的开发环境是VisualStudio2008版的,语言C#,组件System.Net.Sockets,流程的建立包括服务器端的建立和客户端的建立,如图所示:二、实现:1.客户端:第一步,要创建一个客户端对象TcpClient(命名空间在System.Net.Sockets),接着,调用对象下的方法BeginConnect进行尝试连接,入口参数有4个,address(目标IP地址),port(目标端口号),requestCallback(连接成功后的返调函数),state(传递参数,是一个对象,随便什么都行,我建议是将TcpClient自己传递过去),调用完毕这个函数,系统将进行尝试连接服务器。
第二步,在第一步讲过一个入口参数requestCallback(连接成功后的返调函数),比如我们定义一个函数voidConnected(IAsyncResultresult),在连接服务器成功后,系统会调用此函数,在函数里,我们要获取到系统分配的数据流传输对象(NetworkStream),这个对象是用来处理客户端与服务器端数据传输的,此对象由TcpClient获得,在第一步讲过入口参数state,如果我们传递了TcpClient进去,那么,在函数里我们可以根据入口参数state获得,将其进行强制转换TcpClienttcpclt=(TcpClient)result.AsyncState,接着获取数据流传输对象NetworkStreamns=tcpclt.GetStream(),此对象我建议弄成全局变量,以便于其他函数调用,接着我们将挂起数据接收等待,调用ns下的方法BeginRead,入口参数有5个,buff(数据缓冲),offset(缓冲起始序号),size(缓冲长度),callback(接收到数据后的返调函数),state(传递参数,一样,随便什么都可以,建议将buff传递过去),调用完毕函数后,就可以进行数据接收等待了,在这里因为已经创建了NetworkStream对象,所以也可以进行向服务器发送数据的操作了,调用ns下的方法Write就可以向服务器发送数据了,入口参数3个,buff(数据缓冲),offset(缓冲起始序号),size(缓冲长度)。
第三步,在第二步讲过调用了BeginRead函数时的一个入口参数callback(接收到数据后的返调函数),比如我们定义了一个函数voidDataRec(IAsyncResultresult),在服务器向客户端发送数据后,系统会调用此函数,在函数里我们要获得数据流(byte数组),在上一步讲解BeginRead函数的时候还有一个入口参数state,如果我们传递了buff进去,那么,在这里我们要强制转换成byte[]类型byte[]data=(byte[])result.AsyncState,转换完毕后,我们还要获取缓冲区的大小intlength=ns.EndRead(result),ns为上一步创建的NetworkStream全局对象,接着我们就可以对数据进行处理了,如果获取的length为0表示客户端已经断开连接。
具体实现代码,在这里我建立了一个名称为Test的类:2.服务
2023/2/17 5:19:13 297KB TCP/IP C++ 协议
1
线性分式计划全局优化算法的经典启蒙学术论文
2023/2/14 8:15:16 440KB 线性比式和规划分枝定界
1
Angular极品教程environments中存放全局变量1.自定义组件3.自定义服务4.双向数据绑定5.#Ref的用法6.星ngIf指令2.给H5标签指定id的写法是直接#id7.ngForm表单:FormModule1.管道2.ng指令2.ng2中使用动画CSS3.钩子函数1.第三方CSS样式库mdl1.basehref2.路由4.模仿ajax(不用后台,前端写json模仿数据)1.自定义模块2.路由守卫1.生产环境(线上环境)2.你没有后端程序员,你就可以安装http-server(静态webHttpModule模块已经被淘汰
2023/2/13 22:48:20 1.59MB Angular ng
1
dtcms4.0旗舰版源码带手机版DTcms4.0改进的地方:1.后台管理界面加强美化,调整了部分页面的规划;
2.对于会员、订单等进行站点归类,更好区分每个站点数据;
3.创建频道时,根据选择的功能创建不同的管理菜单;
4.网页上传进行了改造上传文件;
5.不再限于全局使用;
6.对系统架构进行全新改造.
2023/2/11 23:31:35 12.88MB dtcms4.0旗舰版
1
本资源为非常不错的一套王网传资源,是继之前上传的基础班的升级版,愈加全面,资源过大,上传乃是下载链接,如失效请留言!!!资源远大于5积分,不多说,下面直接上目录:APC机制I5J$i:U0f1r:O9B(Q"b│01APC的本质.mp4│02备用Apc队列.mp4:U8p7]3f"w$b0?5Z9`0H8G*[│03APC挂入过程.mp48g!H4s1V;]+b4Y9H0L-B│04内核APC执行过程.mp4│05用户APC执行过程.mp4│├─事件等待'x%`"J'}?&S:t']#I5\5G│01临界区.mp4-o(U$W9O+`~0u4~,@.\│02自旋锁.mp4)c3~.J&L,V&s.Q8x/[.w│03线程等待与唤醒.mp4#b*^"k$d#O3f8t8a3k│04WaitForSingleObject函数分析.mp4$V7L'C3I(W│05事件.mp4│06信号量.mp4│07互斥体.mp4│├─保护模式-}!n!C$O/s"Q│014中断门.mp4,B'i,r7Y:B3|!N(^6{l9F│015陷阱门.mp4│017任务段_下.mp4,|/M#A:K3T7i*Q/?I&o&D;p│018任务门.mp46m.D+f4_/V)~9S&B│01910-10-12分页.mp4│020PDE_PTE.mp4│021PDE_PTE属性(P_RW).mp43~/]1x5{4u:{$I│022PDE_PTE属性(US_PS_A_D).mp4│023页目录表基址.mp4│024页表基址.mp4$Af'[+g6}5F;e│0252-9-9-12分页.mp4│0262-9-9-12分页(下).mp4-~'~9i0T5f"p2U$j│027TLB.mp4│028中断与异常.mp4│029控制寄存器.mp46j2l3j)O#{%{4w│030PWT_PCD属性.mp4│031保护模式阶段测试.mp4│_001保护模式.mp4,I;c5X~)t1d1}8S#f3i:b│_002段寄存器结构.mp48n-|-i(H$^*f│_003段寄存器属性探测.mp4│_004段描述符与段选择子.mp4│_005段描述符属性_P位_G位.mp4│_006段描述符属性_S位_TYPE域.mp4│_007段描述符属性_DB位.mp4│_008段权限检查.mp4│_009代码跨段跳转流程.mp4&S#i9i-\0D"@1U-P│_010代码跨段跳转实验.mp4"@*S2Y-a-S6n7n:~│_011长调用与短调用.mp4│_012调用门_上.mp4;[)_2c8A5F%}!u%]:~.N│_013调用门_下.mp4│├─内存管理│01线性地址的管理.mp4;?|+^5i&}│02PrivateMemory.mp4*@3B(Y6^y-{│03MappedMemory.mp4│04物理内存的管理.mp4'[8C6q\1H8w"H2]0Y│05无处不在的缺页异常.mp4│├─句柄表│01句柄表.mp4│02全局句柄表.mp4│5h"u"i&{+G4T+E├─异常│01CPU异常记录.mp4│02模拟异常记录.mp4:K0J(d1
1
模板只需要把百度贴吧目录下得全部文件上传到论坛的根目录下即可使用,为了达到最佳效果,请如下配置:为了更好的展示本风格,请按要求进行修改!必要时请求协助!1.进入[后台]-[界面]-[风格管理],选择[百度贴吧]设置为默认风格;
2.进入[后台]-[工具]-[更新缓存],更新论坛缓存;
3.进去[后台]-[全局]-[站点功能]-[其他]-[启用登录自动选择帐号]选是!4.【关闭左侧版块】进去[后台]-[界面]-[界面设置]-[左侧版块导航宽度]设为05.【列表右边栏】编辑论坛版块管理-[扩展设置]-[显示边栏]选是6.【配色】进入[后台]-[界面]-[风格管理]-编辑本风格-[扩展配色]选择需要开通的背景7.【时间格式】进入[后台]-[全局]-[时间设置]-把“yyyy-mm-dd”修改为“mm-dd”8.【列表右边框推荐主题】编辑论坛版块管理-[扩展设置]-[能否开启推荐主题功能]选是,并按需求修改9.【瀑布流】编辑需要开通瀑布流的版块,[扩展设置]-[开启图片列表模式]选是,主题封面宽度建议设置为22110.窄屏下建议帖内图片最大宽度为58011.搜索框上导航在[界面]-[导航设置]-顶部导航-设为右侧显示12.仿贴吧主题摘要可安装免费版(主题列表图片显示》
2023/2/11 11:01:50 1.35MB 百度贴吧风格 DZ论坛模板
1
第一部分 面向过程的程序设计第1章 C++概述11.1 计算机语言与程序11.1.1 机器语言与程序11.1.2 汇编语言与程序11.1.3 高级语言与程序11.2 从C到C++21.3 程序设计方法21.3.1 结构化程序设计方法31.3.2 面向对象的程序设计方法31.4 简单的C++程序引见41.5 程序开发的步骤5习题15第2章 数据类型、运算符和表达式62.1 保留字和标识符62.1.1 保留字62.1.2 标识符62.2 C++的基本数据类型62.3 常量和变量82.3.1 常量82.3.2 符号常量92.3.3 变量102.4 基本运算符和表达式112.4.1 C++运算符及表达式简介112.4.2 算术运算符和算术表达式112.4.3 运算优先级和结合性112.4.4 关系运算符和关系表达式122.4.5 逻辑运算符和逻辑表达式122.4.6 位运算符和位运算表达式122.4.7 自增、自减运算符和表达式142.4.8 赋值运算符和赋值表达式142.4.9 逗号运算符和逗号表达式152.4.10 sizeof()运算符和表达式152.4.11 逻辑表达式运算优化的副作用152.5 类型转换162.5.1 赋值时的自动类型转换162.5.2 各种类型运算量混合运算时的自动类型转换172.5.3 强制类型转换17习题218第3章 简单的输入/输出193.1 传统的输入/输出函数实现方法193.2 cout输出流203.2.1 输出八进制数、十六进制数和用科学记数法表示的数223.2.2 输出字符或字符串233.3 cin输入流233.3.1 输入十六进制或者八进制数据253.3.2 输入字符数据263.4 总结27习题327第4章 C++的流程控制294.1 算法概述294.1.1 算法的作用和类别294.1.2 算法的设计原则304.1.3 算法的表示工具304.1.4 结构化程序设计中基本结构的表示314.2 C++程序的结构和语句334.3 选择结构语句的使用354.3.1 if语句354.3.2 if语句的嵌套使用374.3.3 条件运算符384.3.4 switch语句394.4 循环结构语句的使用424.4.1 goto语句及标号的使用424.4.2 while语句434.4.3 for语句434.4.4 do-while语句444.4.5 break语句和continue语句454.4.6 循环的嵌套474.5 控制语句的应用举例47习题452第5章 函数545.1 概述545.2 函数的定义与调用545.2.1 函数的定义545.2.2 函数的调用565.2.3 函数的参数585.3 函数的原型声明595.4 函数的嵌套调用和递归调用605.4.1 函数的嵌套调用605.4.2 函数的递归调用635.5 内联函数665.6 函数重载675.6.1 参数类型不同的重载函数675.6.2 参数个数不同的重载函数685.7 使用C++系统函数685.8 作用域和存储类别695.8.1 作用域695.8.2 存储类别725.8.3 全局变量的作用域的扩展和限制745.9 程序的多文件组织765.9.1 内部函数和外部函数765.9.2 多文件组织的编译和连接77习题577第6章 编译预处理796.1 宏定义796.1.1 不带参数的宏定义796.1.2 带参数的宏定义806.2 “文件包含”处理82*6.3 条件编译83习题685第7章 数组867.1 数组的定义及应用867.1.1 一维数组的定义及使用867.1.2 一维数组作函数参数887.1.3 多维数组的定义及使用967.1.4 二维数组作函数参数987.2 字符数组的定义及应用1017.2.1 字符数组的定义1017.2.2 字符数组的初始化1017.2.3 字符数组的使用1027.2.4 字符串和字符串结束标志1027.2.5 字符数组的输入/输出1037.2.6 字符串处理函数1047.2.7 字符数组应用举例106习题7108第8章 结构体、共用体和枚举类型1108.1 结构体的定义及应用1108.1.1 结构体类型的定义1108.1.2 结构体类型变量的定义1118.
2023/2/11 6:48:32 1.36MB 王珊珊 c++ 第二版
1
提出了一种用于全局优化的基于动态聚类的差分进化算法(CDE),以提高差分进化(DE)算法的功能。
随着人口的发展,CDE算法逐渐从早期探索有希望的领域转变为在后期探索具有高精度的解决方案。
对28个基准问题(包括13个高维函数)进行的实验表明,该新方法能够有效地找到接近最优的解。
与其他现有算法相比,CDE以更少的计算量提高了解决方案的准确性。
2023/2/10 20:30:12 268KB global optimization; continuous optimization;
1
针对混沌系统的参数辨识是一个多维参数的优化问题,提出了基于混沌策略形态转移算法的混沌系统参数辨识方法。
该方法是在初始化时以混沌序列初始化种群,在搜索过程中引入混沌变异机制,利用遍历性对形态进行变异操作,避免了过早收敛,提高了全局搜索能力。
利用该算法辨识Lorenz混沌系统参数,并与基本形态转移算法和粒子群算法进行比较。
仿真结果表明,在有无噪声干扰的情况下,该算法比粒子群算法和基本形态转移算法具有更好的辨识精度,且比粒子群算法具有更好的收敛速度。
证明了该算法的有效性和抗干扰性,对混沌理论的发展有重要的意义。
1
文档,主讲了基于全局和局部特征融合的图像婚配算法研究
2023/1/13 16:46:11 2.5MB 基局和局部 特征融合
1
共 466 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡