python实现socket客户端和服务端简单示例

yizhihongxing

下面是详细讲解"Python实现Socket客户端和服务端简单示例"的攻略。

什么是Socket?

Socket是网络编程的基础,它是一个通信端点,用于实现TCP、UDP等传输协议。

Socket的分类

Socket可以分为两种类型:

  • TCP Socket:提供面向连接的通信,能够保证数据的可靠性,使用TCP协议;
  • UDP Socket:提供不可靠的数据报服务,使用UDP协议。

Python中的Socket

Python中提供了socket模块,可以轻松实现Socket功能。该模块将Socket的所有方法和函数都进行了封装,使用起来非常便捷。

使用socket模块时需要注意的是,客户端和服务端都需要创建一个Socket对象,只需要指定不同的参数即可。

下面将展示两个简单的Python Socket示例。

示例1:TCP Socket服务端与客户端通信

1. 创建服务端Socket套接字

在服务端中,通过socket库创建一个TCP套接字。

import socket

def tcp_server(ip, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((ip, port))
    s.listen(5)
    connection, address = s.accept()
    while True:
        data = connection.recv(1024)
        if not data:
            print("Connection closed.")
            break
        print(f"Received data: {data.decode('utf-8')}")
        connection.sendall(data)

    connection.close()
    s.close()

if __name__ == '__main__':
    tcp_server('127.0.0.1', 8888)

2. 创建客户端Socket套接字

在客户端中,通过socket库创建一个TCP套接字。

import socket

def tcp_client(ip, port, message):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((ip, port))
    s.sendall(message.encode())
    response = s.recv(1024)
    print(f"Received data: {response.decode('utf-8')}")

    s.close()

if __name__ == '__main__':
    tcp_client('127.0.0.1', 8888, "Hello, world!")

3. 运行示例

  • 分别在服务端和客户端运行上述代码
  • 当客户端发送数据后,服务端将回传相同的数据

示例2:UDP Socket服务端与客户端通信

1. 创建服务端Socket套接字

在服务端中,通过socket库创建一个UDP套接字。

import socket

def udp_server(ip, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((ip, port))
    while True:
        data, address = s.recvfrom(1024)
        if not data:
            print("Connection closed.")
            break
        print(f"Received data: {data.decode('utf-8')}")
        s.sendto(data, address)

    s.close()

if __name__ == '__main__':
    udp_server('127.0.0.1', 8888)

2. 创建客户端Socket套接字

在客户端中,通过socket库创建一个UDP套接字。

import socket

def udp_client(ip, port, message):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.sendto(message.encode(), (ip, port))
    response, address = s.recvfrom(1024)
    print(f"Received data: {response.decode('utf-8')}")

    s.close()

if __name__ == '__main__':
    udp_client('127.0.0.1', 8888, "Hello, world!")

3. 运行示例

  • 分别在服务端和客户端运行上述代码
  • 当客户端发送数据后,服务端将回传相同的数据

总结

以上是Python实现Socket客户端和服务端的简单示例,其中包括TCP和UDP两种Socket示例,示例完整讲解了Socket原理和基本使用方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现socket客户端和服务端简单示例 - Python技术站

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

相关文章

  • C++实现LeetCode(83.移除有序链表中的重复项)

    下面是关于“C++实现LeetCode(83.移除有序链表中的重复项)”的完整攻略。 题目描述 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例1: 输入: 1->1->2 输出: 1->2 示例2: 输入: 1->1->2->3->3 输出: 1->2->3 解题思路 由于链表已经是…

    other 2023年6月27日
    00
  • 如何使用Idea进行合并代码分支

    如何使用Idea进行合并代码分支攻略 在使用Idea进行合并代码分支之前,确保你已经完成以下准备工作: 确保你已经安装了最新版本的Idea集成开发环境。 确保你已经克隆了代码仓库,并且已经切换到要合并的分支。 下面是使用Idea进行合并代码分支的完整攻略: 步骤1:打开Idea并导航到版本控制工具 打开Idea集成开发环境。 导航到顶部菜单栏,选择 \”VC…

    other 2023年7月27日
    00
  • python生成guid

    Python生成GUID 在许多应用程序中,需要生成全局唯一标识符(GUID),以确保数据的唯一性。 Python中有许多方法可以生成GUID,这篇文章将介绍其中两种比较常见的方法。 方法1:使用uuid模块 Python标准库中的uuid模块,可以用来生成GUID。具体实现如下: import uuid # 生成一个UUID对象 guid = uuid.u…

    其他 2023年3月29日
    00
  • python更新第三方库

    以下是关于如何在Python中更新第三方库的完整攻略,包括基本知识和两个示例。 基本知识 在Python中,第三方库是指由Python社区或其他开发编写的、不属于Python标准库的库。第三方可以通过pip工具进行安装和更新。pip是Python的包管理工具可以用于安装、卸载和更新Python包。 更新第三方库 以下是在Python中更新第三方库的步骤: 打…

    other 2023年5月7日
    00
  • 深入NAS协议系列: 召唤SMB2 OpLock/Lease

    深入NAS协议系列: 召唤SMB2 OpLock/Lease SMB2是一种高性能、可靠的网络文件共享协议,被广泛运用于Windows-based操作系统中。而OpLock和Lease是SMB2协议在文件访问方面的两个关键特性。本文将深入解读这两个概念,帮助读者深入了解SMB2协议在文件共享方面的工作原理。 SMB2协议简介 SMB2协议是一种客户端/服务器…

    其他 2023年3月28日
    00
  • MySQL多表之间字段的匹配实现代码

    下面是MySQL多表之间字段的匹配实现代码的详细攻略: 1. 如何实现两张表之间的字段匹配 假设现在有两张表,一张是 orders,存储订单信息,另一张是 users,存储用户信息。现在要将订单表中的 user_id 字段与用户表中的 id 字段匹配,添加上用户的用户名和手机号。 首先,我们需要用 INNER JOIN 关键字进行连接,并指定连接条件: SE…

    other 2023年6月25日
    00
  • C++实现静态链表

    C++实现静态链表 什么是静态链表 静态链表是使用数组实现的链表结构,也可以叫做顺序链表。使用静态链表可以避免频繁在内存中进行动态分配和释放,提高程序的运行效率。 静态链表的主要特点: 需要预分配一定数量的内存空间作为链表节点存储空间,因此具有固定的空间大小 通过数组下标和指针进行节点之间的链接 静态链表节点中需要额外存储指向下一个节点的指针 静态链表基本实…

    other 2023年6月27日
    00
  • Windows下用命令行修改IP地址的方法详解(附批处理文件)

    下面是详细的“Windows下用命令行修改IP地址的方法详解(附批处理文件)”攻略。 什么是IP地址以及IP地址的基础知识 在开始之前,我们需要先了解一下IP地址以及相关的基础概念。 IP地址 IP地址是Internet协议(Internet Protocol)地址的简称,它是网络上设备的唯一标识符。网络上的所有设备,包括计算机、服务器、路由器等都需要有唯一…

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