你的第一个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.hqwc.cn/news/319960.html

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

相关文章

【金猿CIO展】现代咨询CIO崔恩博:数字化转型,CIO不仅要懂技术和业务,更要“懂人”...

‍ 崔恩博 本文由现代咨询CIO崔恩博撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 最近几年,大数据行业的发展备受关注,尤其是2019年以后,随着企业…

leetcode13 罗马数字转整数

题目描述:罗马数字由七种字符组成,分别为 I、V、X、L、C、D 和 M,对应的数值分别为 1、5、10、50、100、500 和 1000。在一般情况下,小的数字位于大的数字右边,但有特殊情况,如 IV 表示 4,IX 表…

【Mybatis系列】Mybatis判断问题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Android studio BottomNavigationView 应用设计

一、新建Bottom Navigation Activity项目&#xff1a; 二、修改bottom_nav_menu.xml: <itemandroid:id"id/navigation_beijing"android:icon"drawable/ic_beijing_24dp"android:title"string/title_beijing" /><itemandroid:id"i…

Matlab进阶绘图第37期—多色悬浮柱状图

多色悬浮柱状图是一种特殊的柱状图。 与常规柱状图相比&#xff0c;多色悬浮柱状图可以通过悬浮的矩形展示最小值到最大值的范围&#xff08;或其他范围表达&#xff09;&#xff0c;并通过颜色进行美化/区分/附加信息。 本文使用自己制作的Floatingbar小工具进行多色悬浮柱状…

系列十、Spring Cloud Gateway

一、Spring Cloud Gateway 1.1、概述 Spring Cloud全家桶中有个很重要的组件就是网关&#xff0c;在1.x版本中采用的是Zuul网关&#xff0c;但是在2.x版本中&#xff0c;由于Zuul的升级一直跳票&#xff0c;Spring Cloud最后自己研发了一个网关替代Zuul&#xff0c;即&#xf…

Numpy数值计算

目录 1 ndarray创建方法 1.1 创建ndarray 1.2 ndarray常用属性&#xff1a; 1.3 代码测试如下&#xff1a; 1.4 其他函数创建ndarray 1.5 生成随机数的ndarray ​1.6 代码演示如下&#xff1a; 2 ndarray的基础操作 2.1 变换ndarray的形态 2.2 展平ndarray 2.3 组合…

IDEA JAVA Spring Boot运行Hello World(1.8)

参考资料&#xff1a; Spring Boot运行Hello World - 知乎https://blog.csdn.net/weixin_44005516/article/details/108293228(解决bug)SpringBoot入门第一章&#xff1a;Hello World-java教程-PHP中文网 (仅参考如何运行程序)java 8安装教程 java 8安装教程_java8安装-CSDN博…

我的2023

哈喽大家好&#xff0c;我是咸鱼。 果然出来工作后地球转速加快是正常现象&#xff0c;不知不觉 2023 年就结束了&#xff0c;我到现在都有种昨天刚过完 2023 年春节的恍惚。 工作时长已有一年多&#xff0c;刚开始接触工作的时候&#xff0c;有许多工作上的东西能够让我去学…

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

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

各章练习题解析

目录 第1章 EDIT模型概述 题目 解析 第1章 EDIT模型概述 题目 第1题 第2题

cnPuTTY 0.80.0.1—PuTTY Release 0.80中文版本简单说明~~

2023-12-18 官方发布了PuTTY 0.80本次发布主要是针对Terrapin攻击(CVE-2023-48795)的修改发布。 更多详细的内容请查看PuTTY Change Log。 有关Terrapin攻击可用简单参考&#xff1a;警告&#xff01;&#xff01;&#xff01;Terrapin攻击(CVE-2023-48795)~~~ 为了缓解此漏洞…