python课程设计作业-TCP客户端-服务端通信

news2024/11/26 7:30:47

说明文档

目录

  1. 小组成员分工
  2. 作品功能介绍
  3. 使用的工具和方法
  4. 设计的步骤
  5. 课程设计中遇到的问题
  6. 结论

1. 小组成员分工

本次课程设计由以下小组成员完成:

xxx

2. 作品功能介绍

本次课程设计的作品是一个简单的基于 TCP 协议的客户端-服务端通信示例。通过这个示例,我们可以了解 TCP 三次握手的基本原理,并掌握 Python 中 socket 模块的基本使用方法。

具体功能包括:

  • 服务端:监听指定的 IP 地址和端口,等待客户端连接。当客户端连接后,接收客户端发送的数据并回送信息,直到任何一方发送 'bye' 表示结束通信。
  • 客户端:连接到指定的服务端 IP 地址和端口,发送数据并接收服务端的响应,直到任何一方发送 'bye' 表示结束通信。

3. 使用的工具和方法

工具
  • Python 3:编程语言
  • socket 模块:用于实现 TCP 通信
  • VS Code 或 PyCharm:代码编辑器和 IDE
  • Linux 或 Windows:操作系统
方法
  • 使用 Python 的 socket​ 模块创建 TCP 连接,通过 bind()​ 和 listen()​ 方法在服务端绑定 IP 和端口并开始监听,通过 connect()​ 方法在客户端发起连接。
  • 使用 recv()​ 和 send()​ 方法在客户端和服务端之间进行数据传输。
  • 实现简单的控制逻辑来判断是否结束通信。

4. 设计的步骤

步骤一:编写服务端代码
  • 创建一个 TCP socket。
  • 绑定到指定的 IP 地址和端口。
  • 开始监听并等待客户端连接。
  • 接收客户端数据并回送信息。
服务端代码示例:

from socket import socket, AF_INET, SOCK_STREAM

a = socket(AF_INET, SOCK_STREAM)
print(f'服务启动成功!!!')
ip = '172.18.40.184'
port = 8898
a.bind((ip, port))
a.listen(5)
c, d = a.accept()
print('连接成功')
print(f'---------------已连接客户端{c}---------')
info = ''
while info != 'bye':
    data = c.recv(1024).decode('utf-8')
    print(f'客户端发来的数据:{data}')
    if data == 'bye':
        break
    info = input('请输入你要发送给客户端的数据:')
    if info == 'bye':
        break
    c.send(info.encode('utf-8'))
a.close()
c.close()

步骤二:编写客户端代码
  • 创建一个 TCP socket。
  • 连接到服务端的 IP 地址和端口。
  • 发送数据并接收服务端的响应。
客户端代码示例:

import socket

a = socket.socket()
a.connect(('172.18.40.184', 8898))
print('连接成功---')
info = ''
while info != 'bye':
    info = input('请输入要发送的数据:')
    if info == 'bye':
        break
    a.send(info.encode('utf-8'))
    c = a.recv(1024).decode('utf-8')
    if c == 'bye':
        break
    print(f'服务端发送给你的数据:{c}')
a.close()
input()

步骤三:测试与调试
  • 在本地网络环境中运行服务端和客户端代码,测试数据传输的正确性。
  • 调试过程中发现和解决问题,确保通信流程的稳定性。

5. 课程设计中遇到的问题

问题一:IP 地址和端口绑定问题

在初始配置中,由于使用了错误的 IP 地址或端口,导致服务端无法正确启动和监听。通过检查 IP 地址和端口的有效性并进行调整,解决了这个问题。

问题二:数据传输阻塞问题

在数据传输过程中,客户端和服务端有时会出现阻塞,导致程序卡住。通过增加对 recv()​ 和 send()​ 方法的异常处理,确保在数据传输过程中不会因异常数据而阻塞。

问题三:关闭连接问题

在结束通信时,如何正确关闭连接是一个关键问题。通过在代码中添加对 'bye' 关键字的判断,并在检测到 'bye' 后正确关闭 socket 连接,解决了这个问题。

6. 结论

通过这次课程设计,我成功实现了一个简单的 TCP 客户端-服务端通信示例。通过编写和调试代码,我不仅掌握了 Python 中 socket 模块的基本使用方法,还深入理解了 TCP 协议的基本原理和通信流程。


视频讲解

前言

这次视频演示的是tcp的通信过程,本次演示目的在不利用互联网情况下只利用两根网线的原始通信,一方是服务端(172.18.40.184),另一方是客户端(172.18.44.30),服务端开放8898端口进行通信,客户端使用随机端口(1024-49151)进行连接,当双方有一方发送”bye“字符串时就断开连接,exe文件是对应py的打包文件(为了方便演示)

过程

双方的文件夹

服务端(172.18.40.184)启动tcp端口(8898)监听

客户端(172.18.44.30)进行连接

服务端显示连接成功

客户端发送nihao数据

服务端接收到数据

服务端发送hao数据

客户端接受到数据

服务端主动断开连接

相关文章推荐

如果你觉得这篇文章对你有帮助,不妨看看以下几篇相关文章,内容同样精彩:

  1. 病毒肆虐,电脑遭殃,360和火绒哪家强?
    探讨了流行杀毒软件360和火绒的各自优缺点,以及在面对不同病毒威胁时的表现。
  2. 编码器与译码器的工作原理及应用
    详细解析了编码器与译码器的工作原理,特别是n位2^n线编码器的运算规律,对于学习计算机硬件的读者非常有帮助。
  3. python课程设计作业-TCP客户端-服务端通信
    介绍了如何使用Python进行TCP客户端与服务端通信的课程设计作业,适合对网络编程感兴趣的读者。
  4. 海明检验码过程(超详细)
    详尽讲解了海明检验码的原理和实现过程,适合需要了解错误检测与纠正编码的读者。

每篇文章都经过精心编写,涵盖了丰富的知识点和实用技巧,希望能为你的学习和实践提供更多帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1878946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Halcon 特征检测使用

一 Region area: 面积row: 中心的行坐标column: 中心的列坐标width: 区域的宽度(平行于坐标轴)height: 区域的高度(平行于坐标轴)row1: 左上角的行坐标column1: 左上角的列坐标row2: 右下角的行坐标column2: 右下角的列坐标‘ra’; 椭圆的长半轴…

【杂说咋说】中国历史上最古老的十大建筑​,看看你都去过几个?

【杂说咋说】中国历史上最古老的十大建筑​,看看你都去过几个? 中国作为世界四大文明古国之一,历史文化源远流长。在几千年的历史变迁中,中华先祖在神州大地上留下了无数遗迹,其中包括很多古建筑。本期就来介绍一下中…

C语言图书管理系统控制台程序

程序示例精选 C语言图书管理系统控制台程序 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《C语言图书管理系统控制台程序》编写代码,代码整洁,规则,易读…

Web支持rtmp,rtsp,flv,h265,mp4,hls,裸流,低延时全功能播放器ovplayer解决方案

Web视频,监控,直播等业务需一个方便快捷在线播放器,在web上支持低延时的视频直播,会议,交互已经是工作必需,像终端播放器有vlc之类,在Web上没有相关全功能的,业务也需要这种功能全面…

Elasticsearch环境搭建|ES单机|ES单节点模式启动|ES集群搭建|ES集群环境搭建

文章目录 版本选择单机ES安装与配置创建非root用户导入安装包安装包解压配置JDK环境变量配置single-node配置JVM参数后台启动|启动日志查看启动成功,访问终端访问浏览器访问 Kibana安装修改配置后台启动|启动日志查看浏览器访问 ES三节点集群搭建停止es服务域名配置…

洛谷 P1548 [NOIP1997 普及组] 棋盘问题

题目 洛谷 P1548 [NOIP1997 普及组] 棋盘问题 [NOIP1997 普及组] 棋盘问题 题目背景 NOIP1997 普及组第一题 题目描述 设有一个 N M N \times M NM 方格的棋盘 ( 1 ≤ N ≤ 100 , 1 ≤ M ≤ 100 ) (1≤N≤100,1≤M≤100) (1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个正…

Vue结合Element UI的el-table打造加工工序甘特图可视化解决方案

引言 在玻璃加工行业,高效管理切割、磨边、洗、钢化、丝印等复杂工序对于提升生产效率至关重要。本文将介绍如何利用Vue.js框架结合Element UI组件库,自定义实现一个工序甘特图,以可视化展示各道工序的时间线与进度,为生产调度带…

秋招突击——6/28、6.29——复习{数位DP——度的数量}——新作{}

文章目录 引言复习数位DP——度的数量个人实现参考实现 总结 引言 头一次产生了那么强烈的动摇,对于未来没有任何的感觉的,不知道将会往哪里走,不知道怎么办。可能还是因为实习吧,再加上最近复习也没有什么进展,并不知…

浅谈一下VScode如何配置C环境

1.这几天突然发现在VScode写C程序比在DevC效果更好,因为在VScode中写代码有代码补全功能。所以我突然对在VScode中配置C环境变量产生了兴趣。 2.不过在VScode中配置C环境要是按照官方的来配置有点麻烦。 3.我这里有一个直接配置VScode中C环境变量的应用。 前提是…

K8S 集群节点缩容

环境说明: 主机名IP地址CPU/内存角色K8S版本Docker版本k8s231192.168.99.2312C4Gmaster1.23.1720.10.24k8s232192.168.99.2322C4Gwoker1.23.1720.10.24k8s233(需下线)192.168.99.2332C4Gwoker1.23.1720.10.24 1. K8S 集群节点缩容 当集群中有…

8.12 矢量图层面要素单一符号使用十一(短划线渲染边界)

前言 本章介绍矢量图层线要素单一符号中短划线渲染边界的使用说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps 短划线渲染边界(Outline: Hashed Line) Outline系列只画边界,不填充内容以protected_areas.shp为例&#x…

羊了个羊:羊、羊、羊

一、I am me,羊羊羊 英文中的 我就是我(I am me),其实就是:羊 羊 羊,为什么会有这么一个结论呢? 请往下看: I,就是羊 am(是),也是羊 …

2-20 基于matlab的利用准二维发散喷嘴的特性法给出理想喷嘴的几何形状

基于matlab的利用准二维发散喷嘴的特性法给出理想喷嘴的几何形状。 假设气体从燃烧室排出,燃烧室内没有质量流量。 利用二维喷嘴流动关系,找到一个最佳喉管区域,该区域将在给定环境压力和燃烧室参数下产生最大推力。 该区域将自动设置并输入代…

【Verilog HDL-1】基本、向量、模块

HDL习题 1 阻塞型赋值‘’与非阻塞型赋值‘<’ 阻塞型赋值 b a ba ba&#xff1a;适用于纯组合电路 非阻塞型赋值 b < a b<a b<a&#xff1a;适用与时序逻辑电路 2 wire线型,assign连续赋值 wire a,b,c; assign b a; assign c a;与编程语言不同&#xff…

SpringDataJPA系列(2)Commons核心Repository

SpringDataJPA系列(2)Commons核心Repository Spring Data Commons依赖关系 我们通过 Gradle 看一下项目依赖&#xff0c;了解一下 Spring Data Common 的依赖关系 通过上图的项目依赖&#xff0c;不难发现&#xff0c;数据库连接用的是 JDBC&#xff0c;连接池用的是 HikariC…

Orangepi Zero2使用外设驱动库wiringOP配合定时器驱动SG90舵机

目录 一、舵机的基本认知和硬件接线 1.1 舵机的基本认知&#xff1a; 1.2 硬件接线&#xff1a; 1.3 怎么控制舵机旋转不同的角度&#xff1a; 二、Linux定时器 2.1 定时器setitimer()函数原型和头文件&#xff1a; 2.2 信号处理函数signal()原型和头文件&#xff1a; 2…

thymeleaf+mybatis(本文章用于期末考前10分钟速看)

期末速看 pom&#xff08;了解&#xff09;application.propertiessql代码Controller控制层视图service&#xff1a; 服务层mapper&#xff08;dao&#xff09;&#xff1a;持久层entity层(model层&#xff0c;domain层、 bean)&#xff1a;对应数据库表&#xff0c;实体类 效果…

【C语言】指针剖析(2)

©作者:末央&#xff06; ©系列:C语言初阶(适合小白入门) ©说明:以凡人之笔墨&#xff0c;书写未来之大梦 目录 一、数组名1.概念2.sizeof和&里面的数组名sizeof& 二、使用指针访问数组三、一维数组传参本质四、指针数组1.概念实例&#xff08;模拟二维数…

【GitOps】使用Google工具JIB实现本地无需安装容器推送镜像,加速SpringCloud项目开发

文章目录 一、效果展示二、简介三、安装Jib插件1、区分环境2、安装插件一、效果展示 本地是window系统,无docker环境,没有任何runtime,使用jib工具打包镜像并推送完成,用时20秒 二、简介 Jib 是 Google 开发的一款开源工具,旨在帮助 Java 开发者更高效地将 Java 应用程…

25届近5年北京交通大学自动化考研院校分析

北京交通大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、初试大纲复试大纲 七、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试科目介绍 2、指定教…