Python Socket编程指南:从入门到实战

一、什么是socket

在 Python 中使用客户端/服务端 Socket 可以用于在网络上建立通信连接,实现数据的传输和交换。客户端通过 Socket 连接向服务端发送请求,服务端接收并处理这些请求,然后返回响应给客户端。

客户端/服务端 Socket 在网络编程中被广泛应用,适用面相当广泛。比如:

  1. 网络通信:可以通过 Socket 在不同计算机之间进行数据传输和通信,实现远程控制、消息传递等功能。

  2. 分布式系统:在分布式系统中,不同节点之间通过 Socket 进行通信,实现数据共享和协作计算。

  3. Web 开发:在 Web 开发中,客户端通过 Socket 连接 Web 服务器获取网页内容或提交表单数据。

  4. 即时通讯:即时通讯软件(如聊天工具)利用 Socket 实现用户之间的实时通信。

  5. 游戏开发:网络游戏中玩家之间的交互、数据传输等功能通常基于 Socket 实现。

总的来说,客户端/服务端 Socket 在网络编程中是一种非常基础和重要的通信方式,适用于各种场景下的网络通信需求。

二、mq和socket区别

特点Socket(套接字)消息队列(Message Queue)
类型网络通信的编程接口中间件技术
通信方式面向连接的通信方式,实时数据传输异步通信,消息队列中转消息
应用场景实时通信、网络编程、游戏开发等解耦应用组件、异步通信、分布式系统等
数据格式通过 Socket 发送的数据需要自行处理数据格式消息队列提供了消息格式化和解析的功能
可靠性Socket 提供了一定程度的可靠性,但需要自行处理断连重连等问题消息队列可提供较高的可靠性,保证消息的顺序和传递
扩展性Socket 需要自行处理连接管理、数据传输等问题消息队列提供了更多高级功能,如消息持久化、订阅发布等
适用范围适用于点对点的实时通信需求适用于解耦、异步通信、分布式系统等复杂场景

总的来说,Socket 更适用于实时的、点对点的通信需求,而消息队列更适用于解耦、异步通信以及构建复杂的分布式系统等场景。根据具体的应用需求,可以选择使用 Socket 或消息队列,或者结合两者来实现不同的通信功能。

三、客户端代码示例

首先创建了一个 Socket 对象,并通过 connect 方法连接到指定的主机和端口(这里是本地主机 localhost 和端口 8888)。
然后进入一个循环,不断接收用户输入的消息并通过 Socket 发送给服务端,同时接收来自服务端的响应消息并打印出来。
当用户输入 “exit” 后,退出循环并关闭 Socket 连接。

import socket

soc = socket.socket()
soc.connect(("localhost",8888))

while True:
    msg = input("请输入发送给服务端的消息:")
    if "exit" == msg:
        break
    soc.send(msg.encode("UTF-8"))
    data = soc.recv(1024).decode("UTF-8")
    print(f"服务端发来的消息:{data}")
soc.close()

四、服务端代码示例

首先创建了一个 Socket 对象,并通过 bind 方法绑定到指定的主机和端口(同样是本地主机 localhost 和端口 8888)。
然后通过 listen 方法开始监听客户端的连接请求。在接受到客户端连接后,进入一个循环,不断接收客户端发送的消息并打印出来,同时等待用户输入并将其发送给客户端。
当用户输入 “exit” 后,退出循环并关闭客户端连接和 Socket。

import socket

soc = socket.socket()
soc.bind(("localhost",8888))
soc.listen(1)

# 等待客户端链接
conn,address = soc.accept()

print(f"接收到了客户端的连接:{address}")

while True:
    data = conn.recv(1024).decode("UTF-8")
    print(f"客户端发来的消息:{data}")

    msg = input("请输入服务端发送的消息:")
    if "exit" == msg:
        break
    conn.send(msg.encode("UTF-8"))

conn.close()
soc.close()

五、结果展示

客户端和服务端之间的通信基于套接字(Socket),客户端通过套接字连接到服务端,在双方之间建立通信通道。客户端可以向服务端发送请求,服务端则可以接收并处理客户端请求,并向客户端返回响应。在实际应用中,客户端和服务端可能会多次交互,直至完成整个通信过程。
在这里插入图片描述

  • 34
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈年小趴菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值