当前位置: 首页 > 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端口,并在循环中不断接收用户的输入,将输入的消息发送给服务器,然后接收并打印服务器的回复。循环会一直进行,直到程序被手动中断。

相关文章:

  • 智慧监控平台/AI智能视频EasyCVR接口调用编辑通道详细步骤
  • andriod安卓水果商城系统课设
  • 程序员如何高效学习技术?
  • 算法设计与分析 | 矩阵连乘
  • 清除conda和pip缓存的方法
  • STM32 基础知识(探索者开发板)--103讲 通用定时器
  • MACBOOK 通过iterm2连接堡垒机跳转服务器
  • 【用unity实现100个游戏之19】制作一个3D传送门游戏,实现类似鬼打墙,迷宫,镜子,任意门效果
  • json转换(json与对象互转、json与list互转、JSONObject与Map互转)
  • SketchUp各版本安装指南
  • HackTheBox - Medium - Linux - Jupiter
  • Plantuml之对象图语法介绍(十九)
  • LeetCode 268. 丢失的数字
  • 二分查找——OJ题(一)
  • 计算机网络概述(下)——“计算机网络”
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Android 控件背景颜色处理
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • js中forEach回调同异步问题
  • KMP算法及优化
  • laravel with 查询列表限制条数
  • leetcode98. Validate Binary Search Tree
  • socket.io+express实现聊天室的思考(三)
  • SpingCloudBus整合RabbitMQ
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • springMvc学习笔记(2)
  • TCP拥塞控制
  • Vue ES6 Jade Scss Webpack Gulp
  • 基于Android乐音识别(2)
  • 技术发展面试
  • 前端相关框架总和
  • 区块链将重新定义世界
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 入手阿里云新服务器的部署NODE
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • !!Dom4j 学习笔记
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • ###C语言程序设计-----C语言学习(6)#
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (笔试题)分解质因式
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (一) storm的集群安装与配置
  • (转)德国人的记事本
  • (转载)OpenStack Hacker养成指南
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .bat文件调用java类的main方法
  • .NET Compact Framework 多线程环境下的UI异步刷新