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

说明文档

目录

  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.mzph.cn/pingmian/38599.shtml

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

相关文章

【SpringBoot Web框架实战教程】06 SpringBoot 整合 Druid

不积跬步,无以至千里;不积小流,无以成江海。大家好,我是闲鹤,微信:xxh_1459,十多年开发、架构经验,先后在华为、迅雷服役过,也在高校从事教学3年;目前已创业了…

阿里云centos7.9 挂载数据盘到 www目录

一、让系统显示中文 参考:centos7 怎么让命令行显示中文(英文->中文)_如何在命令行中显示中文-CSDN博客 1、输入命令:locale -a |grep "zh_CN" 可以看到已经存在了中文包 2、输入命令:sudo vi…

AGPT•intelligence:带你领略全新量化交易的风采

随着金融科技的快速发展,量化交易已经成为了投资领域的热门话题。越来越多的投资者开始关注和使用量化交易软件来进行投资决策。在市场上有许多量化交易软件可供选择。 Delaek,是一位资深的金融科技专家,在 2020年成立一家专注于数字资产量化…

第一后裔延迟高怎么办?快速降低第一后裔延迟

第一后裔/The First Descendant一款射击游戏,融合了刷宝、角色扮演、团队合作、剧情等元素,让每个玩家都能在自己的角度上,找到切入点,并不断地成长,一步步解开后裔身上隐藏的秘密。近期该作正式上线,很多玩…

vue项目创建+eslint+Prettier+git提交规范(commitizen+hooks+husk)

# 步骤 1、使用 vue-cli 创建项目 这一小节我们需要创建一个 vue3 的项目,而创建项目的方式依然是通过 vue-cli 进行创建。 不过这里有一点大家需要注意,因为我们需要使用最新的模板,所以请保证你的 vue-cli 的版本在 4.5.13 以上&#xff…

Debian linux忘记root密码如何重置

重启电脑, 到下图再按 e 键 在页面中可以看到有个ro的行,在ro行的尾部,添加 rw init/bin/bas 3. ctrl X 启动系统,最后会进入命令行模式 4. 重设root密码,输入命令 passwd root,按照提示输入新密码并确认 5. 重启系…

基于Python的自动化测试框架-Pytest总结-第一弹基础

Pytest总结第一弹基础 入门知识点安装pytest运行pytest测试用例发现规则执行方式命令行执行参数 配置发现规则 如何编写测试Case基础案例断言语句的使用pytest.fail() 和 Exceptions自定义断言函数异常测试测试类形式 pytest的Fixture使用Fixture入门案例使用fixture的Setup、T…

昇思25天学习打卡营第8天|模型训练

昇思25天学习打卡营第8天|模型训练 前言模型训练构建数据集定义神经网络模型定义超参、损失函数和优化器超参损失函数优化器 训练与评估 个人任务打卡(读者请忽略)个人理解与总结 前言 非常感谢华为昇思大模型平台和CSDN邀请体验昇思大模型!从…

linux中如何启动python虚拟环境

找到python虚拟环境所在目录 执行下面的命令即可 source auth_python/bin/activate

【遇坑笔记】Node.js 开发环境与配置 Visual Studio Code

【遇坑笔记】Node.js 开发环境与配置 Visual Studio Code 前言node.js开发环境配置解决pnpm 不是内部或外部命令的问题(pnpm安装教程) 解决 pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本。 前言 最近部…

【代码随想录】【算法训练营】【第49天】 [300]最长递增子序列 [674]最长连续递增序列 [718]最长重复子数组

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 49,周二,坚持不了一点~ 题目详情 [300] 最长递增子序列 题目描述 300 最长递增子序列 解题思路 前提:最大递增子序列的长度 思路:动态规划 d…

基于X86+FPGA的精密加工检测设备解决方案

应用场景 随着我国高新技术的发展和国防现代化发展,航空、航天等领域需 要的大型光电子器件,微型电子机械、 光 电信息等领域需要的微型器件,还有一些复杂零件的加工需求日益增加,这些都需要借助精密甚至超精密的加工检测设备 客…

esp12实现的网络时钟校准

网络时间的获取是通过向第三方服务器发送GET请求获取并解析出来的。 在本篇博客中,网络时间的获取是一种自动的行为,当系统成功连接WiFi获取到网络天气后,系统将自动获取并解析得到时间和日期,为了减少误差每两分钟左右进行一次校…

web平台—apache

web平台—apache 1. 学apache前需要知道的知识点2. apache详解2.1 概述2.2 工作模式2.3 启动apache网站整体流程2.4 相关文件保存位置2.5 配置文件详解 3. apache配置实验实验1:设置apache的目录别名实验2:apache的用户认证实验3:虚拟主机 (重…

江门MES制造执行系统:助力工厂实现智能化管理

江门MES制造执行系统(MES)在工厂实现智能化管理方面发挥着重要作用,以下是它的一些助力方面: 实时监控与控制:江门MES系统可以实时监控生产过程中的各个环节,包括设备状态、生产进度、质量指标等,帮助工厂管理人员及时…

LW-DETR: A Transformer Replacement to YOLO for Real-Time Detection

LW-DETR: A Transformer Replacement to YOLO for Real-Time Detection 论文链接:http://arxiv.org/abs/2406.03459 代码链接:https://github.com/Atten4Vis/LW-DETR 一、摘要 介绍了一种轻量级检测变换器LWDETR,它在实时物体检测方面超越…

CF1981D Turtle and Multiplication 题解

Turtle and Multiplication 传送门 Turtle just learned how to multiply two integers in his math class, and he was very excited. Then Piggy gave him an integer n n n , and asked him to construct a sequence a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,…

Java [ 基础 ] Stream流 ✨

✨探索Java基础Stream流✨ 在现代Java编程中,Stream是一个非常强大的工具,它提供了一种更高效和简洁的方式来处理集合数据。在这篇博客中,我们将深入探讨Java中的Stream流,介绍它的基础知识、常见操作和一些实用示例。 什么是Str…

10-错误-java.lang.IllegalStateException Stopwatch is not running

10-错误-java.lang.IllegalStateException Stopwatch is not running 更多内容欢迎关注我(持续更新中,欢迎Star✨) Github:CodeZeng1998/Java-Developer-Work-Note 技术公众号:CodeZeng1998(纯纯技术文&…

用易查分下发《致家长一封信》,支持在线手写签名,一键导出PDF!

暑假来临之际,学校通常需要下发致家长信,以正式、书面的形式向家长传达重要的通知或建议。传统的发放方式如家长签字后学生将回执单上交,容易存在丢失、遗忘的问题。 那么如何更高效、便捷、安全地将致家长一封信送达给每位家长呢&#xff1f…