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.rhkb.cn/news/227876.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉技术-目标检测数据集

目标检测领域没有像MNIST和Fashion-MNIST那样的小数据集。 为了快速测试目标检测模型,我们收集并标记了一个小型数据集。 首先,我们拍摄了一组香蕉的照片,并生成了1000张不同角度和大小的香蕉图像。 然后,我们在一些背景图片的随机…

【网络安全】网络隔离设备

一、网络和终端隔离产品 网络和终端隔离产品分为终端隔离产品和网络隔离产品两大类。终端隔离产品一般指隔离卡或者隔离计算机。网络隔离产品根据产品形态和功能上的不同,该类产品可以分为协议转换产品、网闸和网络单向导入产品三种。 图1为终端隔离产品的一个典型…

46、激活函数 - Relu 激活

本节介绍一个在神经网络中非常常见的激活函数 - Relu 激活函数。 什么是ReLU激活函数 ReLU 英文名为 Rectified Linear Unit,又称修正线性单元,是一种简单但很有效的激活函数,它的定义如下: 即当输入 x 大于零时,输出等于他自己;当输入小于等于零时,输出为零,下面是re…

迭代归并:归并排序非递归实现解析

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《数据结构&算法》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 📋 前言 归并排序的思想上我们已经全部介绍完了,但是同时也面临和快速排序一样的问题那就是递…

【Python】requests库在CTFWeb题中的应用

目录 ①Bugku-GET ②Bugku-POST ③实验吧-天下武功唯快不破 ④Bugku-速度要快 ⑤Bugku-秋名山车神 ⑥Bugku-cookies ①Bugku-GET import requestsresprequests.get(urlhttp://114.67.175.224:12922/,params{what:flag}) print(resp.text)//或者 //resprequests.get(urlht…

Quartus的Signal Tap II的使用技巧

概述: Signal Tap II全称Signal Tap II Logic Analyzer,是第二代系统级调试工具,它集成在Quartus II软件中,可以捕获和显示实时信号,是一款功能强大、极具实用性的FPGA片上调试工具软件。 传统的FPGA板级调试是由外接…

鸿蒙操作系统:从手机到物联网,打造全场景智能体验

随着科技的不断发展,人们对于操作系统的需求也在不断升级。鸿蒙操作系统,作为华为推出的新一代智能终端操作系统,凭借其强大的分布式能力、流畅的用户体验以及丰富的应用生态,正逐渐成为人们关注的焦点。 一、鸿蒙操作系统概述 …

Redisson依赖冲突记录

前言&#xff1a;项目使用的springboot项目为2.7.X 依赖冲突一&#xff1a;springboot 与 redisson版本冲突 项目中依赖了 Lock4j&#xff0c;此为苞米豆开源的分布式锁组件 <dependency><groupId>com.baomidou</groupId><artifactId>lock4j-redisso…

IP地址的四大类型:动态IP、固定IP、实体IP、虚拟IP的区别与应用

在网络通信中&#xff0c;IP地址是设备在互联网上唯一标识的关键元素。动态IP、固定IP、实体IP和虚拟IP是四种不同类型的IP地址&#xff0c;它们各自具有独特的特点和应用场景。 1. 动态IP地址&#xff1a; 动态IP地址是由Internet Service Provider&#xff08;ISP&#xff…

详解Keras3.0 Layer API: LSTM layer

LSTM layer 用于实现长短时记忆网络&#xff0c;它的主要作用是对序列数据进行建模和预测。 遗忘门&#xff08;Forget Gate&#xff09;&#xff1a;根据当前输入和上一个时间步的隐藏状态&#xff0c;计算遗忘门的值。遗忘门的作用是控制哪些信息应该被遗忘&#xff0c;哪些…

Pycharm2023版本:Python远程调试配置详解

工欲善其事&#xff0c;必先利其器 首先你需要选择一个专业版本的pycharm&#xff0c;社区版本不支持远程配置功能&#xff0c;专业版下载地址&#xff1a;Pycharm 2023 双击程序进行安装&#xff0c;30天内免费试用&#xff0c;如果想要永久使用&#xff0c;办法你懂的&…

中职网络安全Server2002——Web隐藏信息获取

B-2&#xff1a;Web隐藏信息获取 任务环境说明&#xff1a; 服务器场景名&#xff1a;Server2002&#xff08;关闭链接&#xff09;服务器场景用户名&#xff1a;未知 有问题需要环境加q 通过本地PC中渗透测试平台Kali使用Nmap扫描目标靶机HTTP服务子目录&#xff0c;将扫描子…

电脑忘记开机密码很着急?一招搞定

前言 本教程适合没有登录微软账号的电脑哦&#xff5e; 随着手机越智能&#xff0c;人们花在电脑上的时间越来越少了。你家的电脑多久没开机了&#xff1f; 小伙伴有没有这样的经历&#xff1a;很久没有打开过电脑的你&#xff0c;突然有一天打开了电脑&#xff0c;却想不起…

阿里云OpenSearch-LLM智能问答故障的一天

上周五使用阿里云开放搜索问答版时&#xff0c;故障了一整天&#xff0c;可能这个服务使用的人比较少&#xff0c;没有什么消息爆出来&#xff0c;特此记录下这几天的阿里云处理过程&#xff0c;不免让人怀疑阿里云整体都外包出去了&#xff0c;反应迟钝&#xff0c;水平业余&a…

Postman接口测试工具使用

一、前言 在前后端分离开发时&#xff0c;后端工作人员完成系统接口开发后&#xff0c;需要与前端人员对接&#xff0c;测试调试接口&#xff0c;验证接口的正确性可用性。而这要求前端开发进度和后端进度保持基本一致&#xff0c;任何一方的进度跟不上&#xff0c;都无法及…

LV.13 D7 交叉编译工具链 学习笔记

一、交叉编译 1.1 编译原理 机器码&#xff08;二进制&#xff09;是处理器能直接识别的语言&#xff0c;不同的机器码代表不同的运算指令&#xff0c;处理器能够识别哪些机器码是由处理器的硬件设计所决定的&#xff0c;不同的处理器机器码不同&#xff0c;所以机器码不可移植…

设计模式——适配器模式(Adapter Pattern)

概述 适配器模式可以将一个类的接口和另一个类的接口匹配起来&#xff0c;而无须修改原来的适配者接口和抽象目标类接口。适配器模式(Adapter Pattern)&#xff1a;将一个接口转换成客户希望的另一个接口&#xff0c;使接口不兼容的那些类可以一起工作&#xff0c;其别名为包装…

【VRTK】【VR开发】【Unity】18-VRTK与Unity UI控制的融合使用

课程配套学习项目源码资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【背景】 VRTK和Unity自身的UI控制包可以配合使用发挥效果。本篇就讨论这方面的实战内容。 之前可以互动的立体UI并不是传统的2D UI对象,在实际使用中…

iS-RPM2023.2.0.0新版本发布

引言 经过不断努力和精心打磨,我们带着全新版本的RPM产品与大家见面啦!本次更新将为广大流程分析师和质量管理员们提供更深入、更准确的洞察力,以帮助大家在数据驱动的决策中取得更卓越的成果。然而,让海量数据转化为可用的见解并不是一项容易的任务。我们理解数据分析师们…

竞赛保研 基于大数据的股票量化分析与股价预测系统

文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的股票量化分析与股价预测系统 该项目较为新颖…