当前位置: 首页 > news >正文

Python 网络编程之搭建简易服务器和客户端

用Python搭建简易的CS架构并通信


文章目录

  • 用Python搭建简易的CS架构并通信
  • 前言
  • 一、基本结构
  • 二、代码编写
    • 1.服务器端
    • 2.客户端
  • 三、效果展示
  • 总结


前言

本文主要是用Python写一个CS架构的东西,包括服务器和客户端。程序运行后在客户端输入消息,服务器端会收到这条消息。


一、基本结构

需要新建两个py文件,一个用来运行服务器端,一个用来运行客户端。进行测试时,需要保证服务器端和客户端都在运行。


二、代码编写

1.服务器端

代码如下:

import sockethost = 'localhost'
port = 9999sockaddr = (host, port)
sk = socket.socket()
sk.bind(sockaddr)
sk.listen(100)while True:conn, addr = sk.accept()while True:try:data = conn.recv(1024)except Exception as ex:print('已断开连接')breakelse:conn.sendall(data+bytes(',已收到'.encode('utf-8')))print(data)

可能看不懂的代码解释如下:

  1. import socket:导入Python内置的socket模块,该模块提供了与网络通信相关的功能。
  2. host = ‘localhost’:设置服务器的地址为 ‘localhost’。localhost 表示本机,即运行此程序的计算机。
  3. port = 9999:设置服务器的端口号为 9999。端口号是用来标识网络中进程的逻辑地址。
  4. sockaddr = (host, port):将服务器的地址和端口号组合成一个元组(socket地址),用于后续的socket操作。
  5. sk = socket.socket():创建一个socket对象(sk),用于网络通信。
  6. sk.bind(sockaddr):将socket地址绑定到socket对象上,这样socket就可以在指定的地址和端口上接收连接。
  7. sk.listen(100):将socket设置为监听模式,参数100表示最大等待连接队列的长度。
  8. conn, addr =sk.accept():调用socket对象的accept()方法,等待并接受一个客户端的连接请求。返回值是一个包含新连接的socket对象(conn)和客户端的地址信息(addr)的元组。
  9. data =conn.recv(1024):调用新连接的socket对象(conn)的recv()方法,接收客户端发送的数据,参数1024表示一次最多接收1024字节的数据。
  10. conn.sendall(data+bytes(‘,已收到’.encode(‘utf-8’))):调用新连接的socket对象(conn)的sendall()方法,向客户端发送数据。这里将接收到的数据和字符串",已收到"(已转换为字节串)拼接起来发送。

2.客户端

代码如下:

import sockethost = 'localhost'
port = 9999sockaddr = (host, port)
ct = socket.socket()
ct.connect(sockaddr)while True:message = input('请输入要发送的信息:')ct.sendall(bytes(message, 'utf-8'))data = ct.recv(1024)print(data.decode('utf-8'))

可能看不懂的代码解释如下:

  1. import socket:导入Python内置的socket模块,该模块提供了与网络通信相关的功能。
  2. ct =socket.socket():创建一个socket对象(ct,通常客户端的socket对象命名为ct或client_socket),用于网络通信。
  3. ct.connect(sockaddr):调用socket对象的connect()方法,尝试连接到指定的服务器地址和端口。
  4. ct.sendall(bytes(message,‘utf-8’)):调用socket对象的sendall()方法,将用户输入的消息(转换为字节串)发送给服务器。这里使用了UTF-8编码。
  5. data =ct.recv(1024):调用socket对象的recv()方法,接收服务器发送的数据,参数1024表示一次最多接收1024字节的数据。
  6. print(data.decode(‘utf-8’)):将接收到的服务器数据(字节串)解码为字符串,并打印出来。这里使用了UTF-8编码。

三、效果展示

在这里插入图片描述


总结

这段代码实现了一个简单的TCP客户端,它连接到本地主机的9999端口,并在循环中不断接收用户的输入,将输入的消息发送给服务器,然后接收并打印服务器的回复。循环会一直进行,直到程序被手动中断。

http://www.lryc.cn/news/268360.html

相关文章:

  • 往年面试精选题目(前50道)
  • 解决服务器Tab键不能补全问题
  • 人工智能 机器学习 深度学习:概念,关系,及区别说明
  • 数据库——LAMP的搭建及MySQL基操
  • 抗原设计与兔单B细胞技术的结合-卡梅德生物
  • 在uniapp中使用背景渐变色与背景图不生效问题
  • Java中XML的解析
  • React快速入门之交互性
  • 浅谈WPF之ToolTip工具提示
  • Android Studio 如何隐藏默认标题栏
  • 对于c++的总结与思考
  • Flask 账号详情展示
  • 软件测试/测试开发丨Pytest 参数化用例
  • MATLAB中./和/,.*和*,.^和^的区别
  • Flask 与微信小程序对接
  • node.js express框架开发入门教程
  • Spring系列学习二、Spring框架的环境配置
  • 基于飞浆OCR的文本框box及坐标中心点检测JSON格式保存文本
  • ubuntu 安装docker GPG error缺少公钥解决方法
  • Laravel的知识点
  • STM32 基础知识(探索者开发板)--103讲 通用定时器
  • mysqld_exporter使用
  • Java 解决远程调用 ssl 证书认证问题
  • kubernetes(k8s) Yaml 文件详解
  • 手拉手后端Springboot整合JWT
  • 小狐狸GPT付费2.4.9 去除授权弹窗版
  • Scrapy爬虫中合理使用time.sleep和Request
  • 在Spring Cloud中使用Ribbon完成一个简单的负载均衡demo
  • mysql-5.6.16的内存泄漏问题
  • 相机内参标定理论篇------相机模型选择