> # ♻️ 资源
> **大小:** 701KB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010682**](https://www.yuque.com/sxbn/ks/100010682)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87425398**](https://download.csdn.net/download/s1t16/87425398)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
## 一、实验目的:
1、了解TCP与UDP协议,以及它们之间的区别。
2、了解客户/服务器模型原理。
3、熟悉Socket编程原理,掌握简单的套接字编程。
## 二、实验原理:
1、编写用TCP协议实现的Client端和Server端程序并调试通过。
程序流程如图
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355676530-11415dda-9d7a-440d-a508-852486feaffe.png#averageHue=%23f4f4f4&from=url&id=aY1PD&originHeight=546&originWidth=665&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=):
2、编写用UDP协议实现的Client端和Server端程序并调试通过。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355676619-d54d25fe-9c95-4bf1-9cc4-fe0f3980fe84.png#averageHue=%23f6f6f6&from=url&id=AT8Zr&originHeight=425&originWidth=693&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
实验过程:
本作业使用C++MFC完成,使用CAsyncSocket实现TCP和UDP模型。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355676694-04b13487-b9e5-4729-8cc5-c6762db189bd.png#averageHue=%23eeeeee&from=url&id=L5BX4&originHeight=196&originWidth=196&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
## 2.1.TCP模型
实现服务器需要两个派生自CAsyncSocket类的子类,一个用于Accept,一个用于Process。具体实现如下:
CListenSocket继承CAsyncSocket,重载OnAccpet,在OnAccept中Accept(processSocket),然后在CprocessSocket中处理。
CProcessSocket继承CAsyncSocket,重载OnSend OnReceive OnClose,通过AsyncSelect来切换读写的操作,在OnClose中delete本身(因为在accept中是new来的,不然会内存泄露)。
实现客户端只需要一个继承自CAsyncSocket的类,假设叫CConnectSocket,需要重载OnConnect OnSend OnReceive OnClose. OnConnect主要是为了收到接通时的事件,处理errorcode,其他跟服务器类似。
使用时,服务器用Create 并listen,客户端Create 然后Connect进入使用循环。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355676768-fa040c19-040f-46a7-897b-73ae15d691fc.png#averageHue=%23f8f8f8&from=url&id=VQdba&originHeight=223&originWidth=336&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355676862-6b80ca64-3198-48d7-a8b9-550cb500f837.png#averageHue=%23f8f8f8&from=url&id=lKWM9&originHeight=223&originWidth=336&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
首先打开客户端和服务器界面,点击服务器监听,客户端连接(直接点击连接即可,默认IP为本机,端口号1088)后建立连接,发送请求,服务器返回请求,客户端接收,关闭连接,下次发送请求需要重新连接。点击关闭可以中断连接。客户端服务器均有日志记载。演示如图:
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355676962-09a5c869-d4b5-4435-8226-5cec2c737fed.png#averageHue=%23f5f5f4&from=url&id=TEQDC&originHeight=224&originWidth=337&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355677021-3cf0992a-7723-46fa-809b-1236e8e22be8.png#averageHue=%23f2f2f1&from=url&id=JUMK4&originHeight=224&originWidth=338&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
## 2.2.UDP模型
UDP模型比TCP要简单,不分服务器端跟客户端。也可以称为是对等的,都使用相同的派生于CAsyncSocket的类,这里假设为CupdSocket,重载OnReceive,
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355677108-472c7cce-c914-468b-8bf2-c878e90b6179.png#averageHue=%23f9f9f8&from=url&id=nGSuI&originHeight=210&originWidth=343&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=) |
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355677185-06999a45-265d-4cc7-8a98-28ce19561416.png#averageHue=%23efeeee&from=url&id=T9ptJ&originHeight=127&originWidth=340&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
使用时,直接创建Create,然后用SendTo发送数据,接受数据都在OnReceive中,不需要AsyncSelect来切换。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355677302-1a9e29c7-b3d4-42e3-8f92-e793fa3ed3a5.png#averageHue=%23f0f0ef&from=url&id=E9FbN&originHeight=149&originWidth=397&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
同样打开客户和端服务器界面,自动建立连接(默认IP地址为本机,服务器端口号2000,客户端端口号!!!!)客户端发送请求,服务器响应,客户端接收。服务器记录日志。演示如图:
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355677370-91711a26-a49e-4721-a63d-f100dc03ddb5.png#averageHue=%23f0efef&from=url&id=pSbUF&originHeight=151&originWidth=401&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355677436-e281a971-2011-4084-a137-1a670e844b1e.png#averageHue=%23f0efee&from=url&id=nEERZ&originHeight=151&originWidth=402&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355677511-35c2e9b4-4193-442a-b47a-2e7118b8dc8b.png#averageHue=%23f0efee&from=url&id=DFois&originHeight=151&originWidth=403&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714355677600-f808586e-c9a4-40f9-b635-3d2d7d30809a.png#averageHue=%23f5f4f4&from=url&id=N455Q&originHeight=303&originWidth=496&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
至此,实验完成。
神仙别闹
- 粉丝: 4311
- 资源: 7532
最新资源
- Matlab代码函数将图像数组转换为块,以便使用 patch 函数绘制它。.rar
- Matlab代码使用仿射变换矩阵转换体积。.rar
- Matlab函数查找两个图像的变换矩阵。.rar
- u 各向异性扩散Matlab代码.rar
- Matlab函数查找点 (x,y) 是否在不规则、可能凹面的用户定义域中。.rar
- 此 MATLAB 函数在二维中对矩阵 A 执行中位数滤波.rar
- 此 matlab 函数使用 N x N 马赛克对输入图像矩阵进行打乱。.rar
- 不同的算法呈现多光谱图像融合MATLAB代码.rar
- 从 3D 图像计算终点的功能 骨架化结构Matlab代码.rar
- 此项目将对图像进行去模糊处理或重建Matlab代码.rar
- 从 Schlumberger 的油藏模拟器 Eclipse 读取二进制文件MATLAB代码.rar
- 从灰度图像中估计清晰度特征的最简单形式Matlab代码.rar
- 从一系列图像中计算位移和应变MATLAB代码.rar
- 从原始图像和模糊图像中计算模糊内核Matlab代码.rar
- 大数据集的刚体变换Matlab代码.rar
- 从指纹中捕获细节Matlab代码.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈