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

发布于:2024-06-30 ⋅ 阅读:(17) ⋅ 点赞:(0)

说明文档

目录

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

1. 小组成员分工

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

xxx

2. 作品功能介绍

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

具体功能包括:

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

3. 使用的工具和方法

工具
方法

4. 设计的步骤

步骤一:编写服务端代码
服务端代码示例:

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()

步骤二:编写客户端代码
客户端代码示例:

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. 海明检验码过程(超详细)
    详尽讲解了海明检验码的原理和实现过程,适合需要了解错误检测与纠正编码的读者。

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