Python一个简单的通信程序(客户端 服务器)

yizhihongxing

Python一个简单的通信程序(客户端 服务器)攻略

概述

本文主要介绍如何使用Python语言编写一个简单的通信程序,包括客户端和服务器端。通过使用Python内置的socket库,可以很方便地实现网络通信功能。

步骤

客户端

  1. 导入socket库,并创建一个socket对象。

```python
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
```

上述代码中socket.AF_INET指定了地址族为IPv4,socket.SOCK_STREAM指定套接字类型为流式套接字(TCP协议)。

  1. 连接服务器。首先需要指定服务器的IP地址和端口号,然后使用socket.connect()方法连接服务器。

python
server_address = ('127.0.0.1', 8888)
client_socket.connect(server_address)

这里将服务器地址设为本机地址127.0.0.1,端口号为8888,可以根据实际情况进行调整。

  1. 发送数据。使用socket.send()方法向服务器发送数据。

python
message = 'Hello, server!'
client_socket.send(message.encode())

在本例中,将字符串“Hello, server!”按照UTF-8编码格式转换为字节流发送给服务器。

  1. 接收数据。使用socket.recv()方法从服务器接收数据。

python
data = client_socket.recv(1024)
print('Received from server:', data.decode())

在本例中,接收缓冲区大小为1024字节,接收到的数据使用UTF-8格式解码后输出。

  1. 关闭连接。通信结束后,一定要关闭套接字。

python
client_socket.close()

服务器

  1. 导入socket库,并创建一个socket对象。

```python
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
```

同样,这里指定了地址族为IPv4,套接字类型为流式套接字(TCP协议)。

  1. 绑定地址和端口号。使用socket.bind()方法将服务器的地址和端口号绑定到套接字上。

python
server_address = ('127.0.0.1', 8888)
server_socket.bind(server_address)

  1. 监听客户端连接。使用socket.listen()方法开始监听客户端的连接请求。

python
server_socket.listen(5)

在本例中,设置最大连接客户端数量为5。

  1. 接受客户端连接。使用socket.accept()方法接受客户端的连接请求。

python
client_socket, client_address = server_socket.accept()
print('Client connected:', client_address)

当有客户端连接到服务器时,将返回一个新的套接字和客户端地址。

  1. 接收数据。使用socket.recv()方法从客户端接收数据。

python
data = client_socket.recv(1024)
print('Received from client:', data.decode())

在本例中,接收缓冲区大小为1024字节,接收到的数据使用UTF-8格式解码后输出。

  1. 发送数据。使用socket.send()方法向客户端发送数据。

python
message = 'Hello, client!'
client_socket.send(message.encode())

在本例中,将字符串“Hello, client!”按照UTF-8编码格式转换为字节流发送给客户端。

  1. 关闭连接。通信结束后,一定要关闭套接字。

python
client_socket.close()
server_socket.close()

示例

示例1:客户端发送数据,服务器接收并返回

客户端代码:

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('127.0.0.1', 8888)
client_socket.connect(server_address)

message = 'Hello, server!'
client_socket.send(message.encode())

data = client_socket.recv(1024)
print('Received from server:', data.decode())

client_socket.close()

服务器端代码:

import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('127.0.0.1', 8888)
server_socket.bind(server_address)

server_socket.listen(5)

client_socket, client_address = server_socket.accept()
print('Client connected:', client_address)

data = client_socket.recv(1024)
print('Received from client:', data.decode())

message = 'Hello, client!'
client_socket.send(message.encode())

client_socket.close()
server_socket.close()

运行以上代码,在客户端控制台输出:

Received from server: Hello, client!

在服务器控制台输出:

Client connected: ('127.0.0.1', 57410)
Received from client: Hello, server!

示例2:客户端发送多条数据,服务器分别接收并返回

客户端代码:

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('127.0.0.1', 8888)
client_socket.connect(server_address)

messages = ['foo', 'bar', 'baz', 'qux']

for message in messages:
    client_socket.send(message.encode())
    data = client_socket.recv(1024)
    print('Received from server:', data.decode())

client_socket.close()

服务器端代码:

import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('127.0.0.1', 8888)
server_socket.bind(server_address)

server_socket.listen(5)

client_socket, client_address = server_socket.accept()
print('Client connected:', client_address)

while True:
    data = client_socket.recv(1024)
    if not data:
        break
    print('Received from client:', data.decode())
    message = 'ACK ' + data.decode()
    client_socket.send(message.encode())

client_socket.close()
server_socket.close()

运行以上代码,在客户端控制台输出:

Received from server: ACK foo
Received from server: ACK bar
Received from server: ACK baz
Received from server: ACK qux

在服务器控制台输出:

Client connected: ('127.0.0.1', 57412)
Received from client: foo
Received from client: bar
Received from client: baz
Received from client: qux

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python一个简单的通信程序(客户端 服务器) - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • foxmail邮箱如何设置邮件优先级?foxmail设置邮件优先级教程

    Foxmail邮箱如何设置邮件优先级 1. 打开Foxmail邮箱设置界面 首先,打开Foxmail邮箱。点击顶部菜单栏中的“工具”,然后选择“选项”。 2. 进入邮件设置 在弹出的选项窗口中,选择“邮箱”选项卡。在该选项卡下,可以进行一系列的邮件相关设置。 3. 设置邮件优先级 在邮件设置界面中,找到“发送邮件时设置优先级”一栏。通过下拉菜单,选择你想要的…

    other 2023年6月28日
    00
  • python 中的命名空间,你真的了解吗?

    Python 中的命名空间 在 Python 中,命名空间是一个用于存储变量名称和其对应值的系统。它允许我们在代码中使用不同的名称来引用不同的变量,以避免命名冲突和混淆。理解命名空间的概念对于编写清晰、可维护的代码非常重要。 全局命名空间 全局命名空间是在 Python 程序启动时创建的,它包含了所有全局变量的名称和值。全局命名空间在整个程序执行期间都是可用…

    other 2023年7月29日
    00
  • 魔兽世界7.2版本狂徒贼怎么玩_7.2版本狂徒贼入门必看攻略

    魔兽世界7.2版本狂徒贼怎么玩 狂徒贼简介 狂徒贼是游戏中以控制与持续输出为主的近战职业,拥有很强的单个目标的输出能力。在7.2版本中,狂徒贼的伤害被削弱了,但其生存能力得到了增强,并且有扭曲烈焰突袭的加成buff。 狂徒贼属性 技能优先级: 解锁技能 > 猩红风暴 > 暴怒主宰 > 切割 > 凸显 > 飞镖投掷 > 天赋…

    other 2023年6月27日
    00
  • 安卓手机开发人员选项关闭隐藏图文教程

    以下是讲解“安卓手机开发人员选项关闭隐藏图文教程”的完整攻略。 1. 打开手机设置 首先,我们需要打开手机的设置,方法如下:- 点击手机桌面上的“设置”图标。 2. 找到“关于手机”选项 接下来,我们需要找到“关于手机”选项。不同手机品牌和型号的操作方式可能有所不同,一般可以在“设置”界面的底部找到,也可以通过搜索功能查找。以下以小米手机为例:- 在“设置”…

    other 2023年6月26日
    00
  • 魔兽世界7.3暗牧圣物搭配 wow7.3暗牧最佳圣物特质选择优先级介绍

    魔兽世界7.3暗牧圣物搭配攻略 圣物简介 在魔兽世界中,圣物是角色装备身上的一种特殊装备,可以为角色带来额外的属性加成和技能特效。圣物可以通过多种方式获得,很多职业和专精都有特定的圣物。在暗牧职业中,圣物可以带来强大的提升,但是选择正确的圣物非常重要。 暗牧最佳圣物特质选择 下面将介绍暗牧最佳圣物特质选择的优先级。在具体选择圣物时,需要根据自身的装备和属性进…

    other 2023年6月27日
    00
  • Android实现扫描二维码功能

    Android实现扫描二维码功能攻略 本攻略将详细介绍如何在Android应用中实现扫描二维码的功能。我们将使用ZXing库来实现扫描功能,并提供两个示例说明。 步骤一:导入ZXing库 首先,我们需要在Android项目中导入ZXing库。可以通过以下步骤完成导入: 在项目的build.gradle文件中,添加以下依赖项: implementation ‘…

    other 2023年9月6日
    00
  • Python3.遍历某文件夹提取特定文件名的实例

    以下是 “Python3.遍历某文件夹提取特定文件名的实例” 的完整攻略: 1. 确认题意 此题需要我们编写一个 Python3 程序,能够遍历某个指定的文件夹,提取其中所有以特定文件名开头的文件,并将这些文件的路径输出到屏幕上。 2. 编写代码 我们可以使用 Python OS 模块中的 walk() 函数来遍历文件夹,使用 string 模块中的 sta…

    other 2023年6月26日
    00
  • vue.js移动端tab组件的封装实践实例

    下面是详细讲解“vue.js移动端tab组件的封装实践实例”的完整攻略。 1. 准备工作 在真正开始封装tab组件之前,我们需要先准备好环境和工具。 确保你的开发环境已经安装了Node.js。 安装vue.js框架,可以使用Vue-cli来构建项目。 安装webpack,可以使用Vue-cli自带的webpack配置。 2. 定义业务需求 在进行组件的封装之…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部