说明文档
目录
- 小组成员分工
- 作品功能介绍
- 使用的工具和方法
- 设计的步骤
- 课程设计中遇到的问题
- 结论
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数据
客户端接受到数据
服务端主动断开连接
相关文章推荐
如果你觉得这篇文章对你有帮助,不妨看看以下几篇相关文章,内容同样精彩:
- 病毒肆虐,电脑遭殃,360和火绒哪家强?
探讨了流行杀毒软件360和火绒的各自优缺点,以及在面对不同病毒威胁时的表现。 - 编码器与译码器的工作原理及应用
详细解析了编码器与译码器的工作原理,特别是n位2^n线编码器的运算规律,对于学习计算机硬件的读者非常有帮助。 - python课程设计作业-TCP客户端-服务端通信
介绍了如何使用Python进行TCP客户端与服务端通信的课程设计作业,适合对网络编程感兴趣的读者。 - 海明检验码过程(超详细)
详尽讲解了海明检验码的原理和实现过程,适合需要了解错误检测与纠正编码的读者。
每篇文章都经过精心编写,涵盖了丰富的知识点和实用技巧,希望能为你的学习和实践提供更多帮助!