python socket 编程实现猜数字

简介: python socket 编程实现猜数字

项目地址

https://gitee.com/lmk73444/learn_spring/tree/master/doc/1_x%E5%AD%A6%E4%B9%A0/002_py_socet


python socket试验

mkdir /root/git_proj
cd /root/git_proj
# 首次 clone 项目
git clone https://gitee.com/lmk73444/learn_spring.git
# 非首次
# 更新项目
cd /root/git_proj/learn_spring
git remote update
git checkout -f origin/master
# 进入实验目录
cd /root/git_proj/learn_spring/doc/1_x学习/002_py_socket
# 在宿主机 启动 猜数服务器
docker compose up -d
# [+] Running 3/3
#  ✔ Network 002_py_socket_default            Created                                                                0.1s
#  ✔ Container 002_py_socket-socket-client-1  Started                                                                0.1s
#  ✔ Container 002_py_socket-socket-server-1  Started
# 打印客户端输出
docker logs  002_py_socket-socket-client-1
# 请出拳:(0) 石头(1) 剪刀(2) 布
# 绑定 client 容器输入输出
docker attach  002_py_socket-socket-client-1
# 0
# 你出了:石头,计算机出了:石头平局请出拳:(0) 石头(1) 剪刀(2) 布
# 1
# 你出了:剪刀,计算机出了:布你赢了!请出拳:(0) 石头(1) 剪刀(2) 布
# 1
# 如果出现 
# You cannot attach to a stopped container, start it first
# 重新 启动 客户端
docker compose up -d

server.py

import socketserver
import random
all_choices = ['石头', '剪刀', '布']
win_list = [['剪刀', '布'], ['布', '石头'], ['石头', '剪刀']]
#创建一个socketserver类继承socketserver模块下的BaseRequestHandler类
class MyServer(socketserver.BaseRequestHandler):
    def handle(self, cwin=0,pwin=0):# 服务器端阻塞,等待客户端连接
        #重写父类中的handle方法,主要实现服务端的逻辑代码,,不用写bind() listen() accept()
        while True:
            conn = self.request
            addr = self.client_address
            print(conn)  #<socket.socket fd=864, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 50565)>
            print(addr)  #('127.0.0.1', 50565)
            while True:
                computer = random.choice(all_choices)
                send_data=('\n请出拳:(0) 石头(1) 剪刀(2) 布')
                send_data=send_data.encode()
                conn.sendall(send_data)
                recv_data = str(conn.recv(20480), encoding='utf8') #接收到来自客户端的数据
                print(recv_data)
                if recv_data == 'bye':   #如果客户端发送的是‘bye’就断开连接
                    break
                index = int(recv_data)
                player = all_choices[index]
                send_data = ('\n你出了:%s,计算机出了:%s' % (player, computer))
                send_data = send_data.encode()
                conn.sendall(send_data)
                if player == computer:
                     send_data = ('\n\033[32;1m平局\033[0m')
                     send_data = send_data.encode() # 类型转换
                     conn.sendall(send_data)  # 服务器端回复数据给客户端
                elif [player, computer] in win_list:
                     send_data = ('\n\033[32;1m你赢了!\033[0m')
                     send_data = send_data.encode()
                     conn.sendall(send_data)
                     pwin += 1
                else:
                     send_data=('\n\033[31;1m你输了!\033[0m')
                     send_data = send_data.encode()
                     conn.sendall(send_data)
                     cwin += 1
        conn.close()
if __name__ == '__main__':
    #实例化server对象,传入本机ip,以及监听的端口号,还有新建的继承socketserver模块下的BaseRequestHandler类
    server = socketserver.ThreadingTCPServer(('0.0.0.0',9999),MyServer)
    #激活服务端
    server.serve_forever()


相关文章
|
3月前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
在数字时代,网络应用成为连接世界的桥梁。Python凭借简洁的语法和丰富的库支持,成为开发高效网络应用的首选。本文通过实时聊天室案例,介绍Python Socket编程的基础与进阶技巧。基础篇涵盖服务器和客户端的建立与数据交换;进阶篇则探讨多线程与异步IO优化方案,助力提升应用性能。通过本案例,你将掌握Socket编程的核心技能,推动网络应用飞得更高、更远。
68 1
|
2月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
153 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
2月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
172 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
1月前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
31 1
|
2月前
|
消息中间件 监控 网络协议
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
本文介绍了Python的`socket`模块,讲解了其基本概念、语法和使用方法。通过简单的TCP服务器和客户端示例,展示了如何创建、绑定、监听、接受连接及发送/接收数据。进一步探讨了多用户聊天室的实现,并介绍了非阻塞IO和多路复用技术以提高并发处理能力。最后,讨论了`socket`模块在现代网络编程中的应用及其与其他通信方式的关系。
190 3
|
2月前
|
安全 网络协议 网络安全
Python Socket编程大揭秘:从菜鸟到黑客的进阶之路,你准备好了吗?
【10月更文挑战第4天】在编程领域,Python Socket编程犹如一把开启网络世界的钥匙,带领开发者从简单数据传输迈向复杂应用构建。本文将引导你从零开始,逐步掌握Socket编程的核心技巧,包括基本概念、TCP服务器与客户端的搭建、并发处理及异常管理、SSL/TLS加密通信,直至深入了解网络协议与安全漏洞。通过实战演练与理论学习,助你成为驾驭网络世界的高手。
36 1
|
2月前
|
存储 网络协议 Linux
聊一聊 Python 的 socket,以及 select、poll、epoll 又是怎么一回事?
聊一聊 Python 的 socket,以及 select、poll、epoll 又是怎么一回事?
152 2
|
3月前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
在数字宇宙中,网络如同复杂脉络连接每个角落,Python Socket编程则是开启这一世界的钥匙。本文将引导你从基础概念入手,逐步掌握Socket编程,并通过实战示例构建TCP/UDP服务器与客户端。你将学会使用Python的socket模块进行网络通信,了解TCP与UDP的区别,并运用多线程与异步IO提升服务器性能。跟随本文指引,成为网络世界的建筑师,构建自己的网络帝国。
38 2
|
3月前
|
网络协议 Python
告别网络编程迷雾!Python Socket编程基础与实战,让你秒变网络达人!
在网络编程的世界里,Socket编程是连接数据与服务的关键桥梁。对于初学者,这往往是最棘手的部分。本文将用Python带你轻松入门Socket编程,从创建TCP服务器与客户端的基础搭建,到处理并发连接的实战技巧,逐步揭开网络编程的神秘面纱。通过具体的代码示例,我们将掌握Socket的基本概念与操作,让你成为网络编程的高手。无论是简单的数据传输还是复杂的并发处理,Python都能助你一臂之力。希望这篇文章成为你网络编程旅程的良好开端。
64 3
|
3月前
|
网络协议 开发者 Python
网络编程小白秒变大咖!Python Socket基础与进阶教程,轻松上手无压力!
在网络技术飞速发展的今天,掌握网络编程已成为开发者的重要技能。本文以Python为工具,带你从Socket编程基础逐步深入至进阶领域。首先介绍Socket的概念及TCP/UDP协议,接着演示如何用Python创建、绑定、监听Socket,实现数据收发;最后通过构建简单的聊天服务器,巩固所学知识。让初学者也能迅速上手,成为网络编程高手。
81 1