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

获取微信公众号所有订阅用户,并批量获取用户基本信息

获取微信公众号所有订阅用户&#xff0c;并批量获取用户基本信息 public void syncSubscribe() {String appId ApiConstants.PUBLIC_ACCOUNT_APP_ID;// 所有订阅用户List<String> openIdList getUserList(appId);// 一个批次只能查100条数据&#xff0c;将List按100的长…

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

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

Debian linux忘记root密码如何重置

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

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

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

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

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

linux中如何启动python虚拟环境

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

2024自然语言处理期末回忆

2024.6.19考 总体来说&#xff0c;很离谱&#xff0c;那么多ppt&#xff0c;考之前以为肯定会考算法&#xff0c;看了好久的算法&#xff0c;结果考了很多概念题。 就是说&#xff0c;这门课很抽象&#xff0c;能不选就别选了。 1.&#xff08;1&#xff09;什么是预训练词向…

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

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

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

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

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

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

esp12实现的网络时钟校准

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

clock时钟周期

clock时钟周期 #include <iostream> #include <ctime>int main() {clock_t start clock(); // 获取开始时间的时钟周期数// 模拟一些工作for (long long i 0; i < 10000000000; i);clock_t end clock(); // 获取结束时间的时钟周期数std::cout << &q…

web平台—apache

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

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

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

【linux】(8)文件搜索grep

grep 用于在文件中搜索指定的模式&#xff08;字符串或正则表达式&#xff09;&#xff0c;并输出匹配的行。 基本用法 grep [options] pattern [file...]常用选项 基本搜索 grep pattern filename例子&#xff1a;搜索文件 example.txt 中包含字符串 hello 的行。 grep &quo…

【vueUse库Animation模块各函数简介及使用方法】

vueUse库是一个专门为Vue打造的工具库,提供了丰富的功能,包括监听页面元素的各种行为以及调用浏览器提供的各种能力等。其中的Browser模块包含了一些实用的函数,以下是这些函数的简介和使用方法: vueUse库Sensors模块各函数简介及使用方法 vueUseAnimation函数1. useInter…