Python TCP通信客户端服务端代码实例

首先,我们需要了解什么是TCP通信。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它在互联网中被广泛使用,例如浏览网页、下载文件等。TCP通过三次握手建立连接,在数据传输过程中会保证数据的可靠传输,也能够保证数据的顺序正确。

在Python中,通过socket模块可以实现TCP通信。下面,我们来介绍如何编写Python TCP通信客户端服务端代码实例。

编写TCP服务器端代码

import socket

# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 获取本地主机名和端口号
host = socket.gethostname()  # 获取本地主机名
port = 9001  # 设置端口号

# 绑定地址与端口号
server_socket.bind((host, port))

# 设置最大连接数
server_socket.listen(5)

# 等待客户端连接
while True:
    client_socket, addr = server_socket.accept()  # accept方法返回conn(客户端连接)和address(客户端地址)
    print('Connect from:', addr)
    message = 'Welcome to the TCP server!'
    # 发送消息
    client_socket.send(message.encode('utf-8'))
    # 关闭连接
    client_socket.close()

上面的代码创建了一个TCP服务器,并绑定到本地主机名和指定端口号。然后,服务器一直处于监听状态,接受客户端的连接请求,并向客户端发送欢迎消息。可以看出,代码中使用了套接字(socket)模块中的socket()bind()listen()accept(), send()close()等方法。

编写TCP客户端代码

import socket

# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 获取本地主机名和端口号
host = socket.gethostname()  # 获取本地主机名
port = 9001  # 设置端口号

# 连接服务器
client_socket.connect((host, port))

# 接受服务器端发送的消息
message = client_socket.recv(1024).decode('utf-8')

# 输出接收到的消息
print(message)

# 关闭连接
client_socket.close()

上面的代码是一个TCP客户端,它首先创建一个socket对象,然后连接服务器,并接受服务器发送的消息。最后,客户端关闭连接。可以看出,代码中使用了套接字(socket)模块的socket()connect()recv()close()等方法。

示例说明:

下面,我们通过两个示例说明如何使用这两份代码进行简单的网络通信。

示例一:发送消息到服务器

在本地终端执行服务器端代码,使用Python运行:

python tcp_server.py

然后,在另一个终端执行客户端端代码,使用Python运行:

python tcp_client.py

可以看到,服务器输出了客户端的地址,而客户端接收到来自服务器的欢迎消息。这表明通信成功,也说明相关源码的正确性。

示例二:反向通信

如果你想要在示例一的基础上使服务器反向发送消息给客户端,可以对服务器端代码稍作修改:

import socket

# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 获取本地主机名和端口号
host = socket.gethostname()  # 获取本地主机名
port = 9001  # 设置端口号

# 绑定地址与端口号
server_socket.bind((host, port))

# 设置最大连接数
server_socket.listen(5)

# 等待客户端连接
while True:
    client_socket, addr = server_socket.accept()  # accept方法返回conn(客户端连接)和address(客户端地址)
    print('Connect from:', addr)
    # 接收消息
    message = client_socket.recv(1024).decode('utf-8')
    print(message)
    # 发送消息
    message = 'Welcome to the TCP server!'
    client_socket.send(message.encode('utf-8'))
    # 关闭连接
    client_socket.close()

在这个示例中,服务器接收来自客户端的消息,并返回欢迎消息,完成了一次简单的反向通信。

这就是Python TCP通信客户端服务端代码实例的完整攻略。如果你想继续深入学习,可以了解更多有关套接字的知识,例如套接字类型、在Windows和Linux下的套接字编程等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python TCP通信客户端服务端代码实例 - Python技术站

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

相关文章

  • 详解Python 重命名目录中的所有文件名

    当需要批量重命名目录中的所有文件名时,可以使用Python进行自动化操作。以下是使用Python重命名目录中的所有文件名的完整攻略: 1. 导入必要的模块 要进行文件名修改,首先要导入Python内置的os模块,该模块提供了很多文件操作函数。 import os 2. 使用os.listdir()函数获取目录下的所有文件名 使用os.listdir()函数获…

    python-answer 2023年3月25日
    00
  • Python中的常见数据集打乱方法

    针对Python中常见的数据集打乱方法,我为大家提供以下完整攻略。 打乱数据集的原因 在机器学习中,我们通常会将数据集分成训练集、验证集和测试集。由于数据集中每个类别的数据一般是顺序存储的,如果我们在分数据集之前不打乱数据集的顺序,就有可能会导致测试集或验证集中只包含某一类别的数据,这样就没有代表性了。 打乱数据集的顺序可以避免该问题的发生,从而提高模型的准…

    python 2023年6月3日
    00
  • Python列表的切片实例讲解

    以下是“Python列表的切片实例讲解”的完整攻略。 1. 列表切片的概述 在Python中,列表(list)一种常见的数据类型,它允许我们储多个值。列表切片是通过下标范围来访问列表中的元素。体来说,我们可以使用A[start:end]的方式来问列表A中从start到end-1的元素。 2. 列表切片的语法 Python中的列表切片语法如下: A[start…

    python 2023年5月13日
    00
  • 遗传算法python版

    下面是关于“遗传算法Python版”的详细讲解。 1. 遗传算法的基本原理 遗传算法是一种基于自然选择和遗传学原理的优化算法,它通过模拟生物进化过程来寻找最优解。遗传算法的基本流程如下: 初始化种群:随机生成一组初始解作为种群。 选择:根据适应度函数选择一部分优秀的个体作为父代。 交叉:将父代个进行交叉操作,生成新的子代个体。 变异:对子代个体进行变异操作,…

    python 2023年5月13日
    00
  • 对python中的argv和argc使用详解

    对Python中的argv和argc使用详解 在学习Python编程之前,我们需要熟悉Python的参数传递机制。在Python中,命令行参数通过sys.argv传递给程序。在本文中,我们将了解Python中的argv和argc。 什么是argv? argv是Python中的一个列表,并且其中包含着传递给Python脚本/函数的命令行参数。该列表中的第一个元…

    python 2023年6月3日
    00
  • 解决Python 爬虫URL中存在中文或特殊符号无法请求的问题

    解决Python爬虫URL中存在中文或特殊符号无法请求的问题,可以采用两种方法。 方法一:使用urllib.parse.quote()方法进行URL编码 在Python中,URL编码可以使用urllib.parse.quote()方法实现。该方法可以将URL中的中文和特殊字符进行编码,以便于浏览器或服务器正确的解析URL。 示例代码如下: import ur…

    python 2023年5月20日
    00
  • python实现多线程采集的2个代码例子

    下面是详细的攻略: Python实现多线程采集 前言 对于一些需要收集数据的任务,并发的采集方式无疑是对效率的一大提升。Python语言提供了多线程编程的支持,本文将会介绍两种使用Python实现多线程采集的方式并提供相应的代码。 代码实现 代码一 第一种实现方式相对来说比较简单理解,我们可以直接使用Thread类来创建新的线程并运行。 import thr…

    python 2023年5月19日
    00
  • 如何检查一个给定的NumPy数组的元素是否为非零

    检查给定NumPy数组中元素是否为非零的方法有多种,下面分别介绍两种方法。 方法一:使用numpy.nonzero()函数 使用numpy.nonzero()函数可以获得指定数组中非零元素的下标。 具体的操作方法如下: 导入numpy模块:import numpy as np 创建一个NumPy数组:a = np.array([0, 1, 2, 0, 0, …

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部