你的第一个C/S程序

目录

  • socket
  • 服务端代码
  • 客户端代码
  • 执行结果

socket

socket基础知识

服务端代码

import socket
import threading
import timeMSG_LENGTH = 64
DISCONNECTED = '!CONNECTION CLOSED'
connections = 0#定义服务器地址
server_ip = socket.gethostbyname(socket.gethostname())
server_port = 5555
server_addr = (server_ip, server_port)#创建服务器套接字并绑定到工作地址
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(server_addr)def handle_client(client_socket, client_addr):print(f'新连接建立,远程客户机地址是:{client_addr}'+'\n')connected = Truewhile connected:try:msg_len = client_socket.recv(MSG_LENGTH).decode('utf-8') #接收消息长度except ConnectionResetError:global connectionsconnections -= 1print(f'远程客户机{client_addr}关闭了连接,活动连接数量是:{connections}')break;msg_len = int(msg_len)if msg_len > 0:msg = client_socket.recv(msg_len).decode('utf-8') # 接收消息内容if msg == DISCONNECTED: # 收到客户机断开连接的消息connected = Falseprint(f'客户机:{client_addr}断开了连接!')connections -= 1print(f'服务器当前活动连接数量是:{connections}')print(f'来自客户机{client_addr}的消息是:{msg}')# 回送消息echo_message = f'服务器{client_socket.getsockname()}收到消息:{msg},时间:{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}'client_socket.send(echo_message.encode('utf-8'))client_socket.close() # 关闭会话连接server_socket.listen()
print(f'服务器开始在{server_addr}侦听...')while True:new_socket, new_addr = server_socket.accept()client_thread = threading.Thread(target=handle_client, args=(new_socket, new_addr))client_thread.start()connections += 1print(f'服务器当前活动连接数量是:{connections}')

客户端代码

import socketMSG_LENGTH = 64
DISCONNECTED = '!CONNECTION CLOSED'remote_ip = socket.gethostbyname(socket.gethostname())
remote_port = 5555
remote_addr = (remote_ip, remote_port)client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(remote_addr)
print(f'客户机工作地址:{client_socket.getsockname()}')def send_recv(msg):message = msg.encode('utf-8') # 消息编码 发消息需编码msg_len = len(message) # 消息长度str_len = str(msg_len).encode('utf-8') # 长度编码str_len += b' ' * (MSG_LENGTH - len(str_len)) # 空白处补空格client_socket.send(str_len) # 发送消息长度client_socket.send(message) # 发送消息内容echo_message = client_socket.recv(1024).decode('utf-8') # 接收服务器消息print(echo_message)while True:inputStr = input('请输入待发送的字符串(Q:结束会话):')if inputStr.lower() == 'q':breaksend_recv(inputStr) # 发送消息和接收消息send_recv(DISCONNECTED)
client_socket.close()

执行结果

启动服务端:
在这里插入图片描述

启动客户端1并发送消息:
在这里插入图片描述
在这里插入图片描述

启动客户端2并发送消息:
在这里插入图片描述
在这里插入图片描述

启动客户端3并发送消息:
在这里插入图片描述

在这里插入图片描述

关闭客户机2:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/595607.shtml

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

相关文章

【设计模式之美】面向对象分析方法论与实现(二):需求到接口实现的方法论

文章目录 一. 进行面向对象设计1. 划分职责>需要有哪些类2. 定义类及其属性和方法3. 定义类与类之间的交互关系4. 将类组装起来并提供执行入口 二. 如何进行面向对象编程?1. 接口实现2. 辩证思考与灵活应用 【设计模式之美】面向对象分析方法论与实现&#xff08…

教育场景数字化中音视频小程序的发展

教育场景数字化逐步成为刚需 2018年以来,国家对在线教育行业的监管收紧,以及受益于 5G 技术的发展,教育科技逐步走向成熟化和规范化。 教育行业的本质是人与人(老师与学生、老师与家长,以及更多角色直接的沟通与互动…

【数据结构和算法】小行星碰撞

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 什么情况会用到栈 2.2 方法一:模拟 栈 三、代码 3.1 方法一:模拟 栈 四…

【LLM+RS】LLM在推荐系统的实践应用(华为诺亚)

note LLM用于推荐主要还是解决推荐系统加入open domain 的知识。可以基于具体推荐场景数据做SFT。学习华为诺亚-技术分享-LLM在推荐系统的实践应用。 文章目录 note一、背景和问题二、推荐系统中哪里使用LLM1. 特征工程2. 特征编码3. 打分排序 三、推荐系统中如何使用LLM四、挑…

共享WiFi贴项目加盟可以解决商家哪些痛点?

近年来,共享WiFi贴项目在共享商业领域引起了广泛关注。作为一种便捷的网络分享工具,共享WiFi贴不仅受到很多人的青睐,更能够为商家带来诸多实际利益。那么,共享WiFi贴项目加盟究竟可以解决商家哪些痛点呢? 共享WiFi贴为…

【C#】知识点实践序列之Lock的锁定代码块

大家好,我是全栈小5,欢迎来到《小5讲堂之知识点实践序列》文章。 2024年第1篇文章,此篇文章是C#知识点实践序列之Lock知识点,博主能力有限,理解水平有限,若有不对之处望指正! 本篇验证Lock锁定代…

Navicat(数据库可视化软件)安装教程以及连接MYSQL

Navicat安装教程以及连接MYSQL Navicat(数据库可视化软件)安装流程安装MySQLnavicat连接mysql数据库 Navicat(数据库可视化软件) Navicat 是一款专门为 MySQL 设计的可视化数据库 GUI 管理工具,我们可以在自己的计算机…

深入浅出Python日志打印

0.引言 在编程过程中,日志记录是一项非常重要的任务,无论是用于调试代码、记录系统运行状态,还是跟踪可能出现的问题,日志都能发挥重要作用。然而,许多开发者习惯使用简单的print语句来记录信息,这种方法虽…

ensp vlan连接(详细)

1.将需要的设备放置好 2.将设备连接起来 3.启动所有设备 4.备注好每台PC机的信息 5.配置好每台PC机 6.配置交换机1 进入配置视图,关闭信息提示 重命名设备 批量创建VLAN 开始配置接口 更改接口类型为ACCESS 将接口划分到对应的VLANN 配置下一个接口,步…

编译 nccl-tests 项目

1,编译 下载源代码 git clone --recursive https://github.com/NVIDIA/nccl-tests.git 编译源代码 cd nccl-tests/ make -j 2,运行 cd ./build/ ./all_reduce_perf --help ./all_reduce_perf -b 8 -e 256M -f 2 -g 4 效果图: 3&#…

说说产品经理能力模型

产品经理的能力模型应该是什么样的,可能100个产品人会有100种看法,每个人的认知都是不一样的,今天和大家分享下我对产品经理能力模型的总结。 前段时间,一个30多岁做前端开发的朋友跟我说想转行做产品,让我帮忙指导下…

关于Python里xlwings库对Excel表格的操作(三十)

这篇小笔记主要记录如何【如何使用“Chart类”、“Api类"和“Axes函数”为新图表设置标题文本内容、字体、字号、粗细、正斜、颜色、坐标轴主要网格线】。前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】…

Maple 各版本安装指南

Maple 下载链接 https://pan.baidu.com/s/11hKo1XxZGa0xv3Ivj6fbEA?pwd0531 1.鼠标右击【Maple 2023】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 Maple 2023】。 2.打开解压后的文件夹,鼠标右击【Setup】选择【以管理员身…

计算机毕业设计------SSM的公寓房屋出租系统

项目介绍 该项目分为前后台,分为普通用户与管理员两种角色。 前台主要功能包括: 普通用户的注册、登录,房屋列表展示,租房,我的订单、用户中心等功能模块; 后台主要功能包括: 系统设置:菜单管…

航空业数字化展翅高飞,开源网安专业服务保驾护航

​某知名航空公司是中国首批民营航空公司之一,运营国内外航线200多条,也是国内民航最高客座率的航空公司之一。在数字化发展中,该航空公司以数据驱动决策,通过精细化管理、数字创新和模式优化等方式,实现了精准营销和个…

day58算法训练|单调栈part01

参考:代码随想录 单调栈的使用情况: 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。 单调栈的本质是空间换时间,因为在遍历…

10款值得推荐的Blazor UI组件库

前言 经常看到有小伙伴在DotNetGuide技术社区交流群里问有什么好用的Blazor UI组件库推荐的,本文将分享一些开源、实用、美观的Blazor UI组件库,提供给广大C#/.NET开发者们学习和使用(注意:排名不分先后,都是十分优秀…

Python内置类属性__module__属性的使用教程

概要 在Python中,每个对象都有一些内置的属性,这些属性提供了有关对象的一些信息。其中一个内置属性是__module__属性。__module__属性是一个字符串,它表示定义了类或函数的模块的名称。在本篇文章中,我们将详细介绍__module__属…

BUUCTF——Reverse——[GXYCTF2019]luck_guy

1、题目 2、工具 Exeinfo PE:查壳工具。IDA:是一款功能强大的反汇编工具,用于分析和逆向工程二进制文件。python:编写自动化脚本。 3、方法 下载压缩包,解压得到一个没有后缀的文件。 用Exeinfo PE查询该文件是否加…

sql:定时执行存储过程(嵌套存储过程、使用游标)

BEGINDeclare FormNo nvarchar(20) --单号Declare Type nvarchar(50) --类型Declare PickedQty float -Declare OutQty float Declare 生产量 floatDeclare 已装箱数量 float Declare 已入库数量 floatDeclare 损耗数量 float Declare 退货品出库数量 intdeclare k c…