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

下面是详细讲解"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日

相关文章

  • Win8学生开发者账号的免费注册流程

    Win8学生开发者账号的免费注册流程如下: 步骤一:注册微软学生俱乐部账号 首先,进入微软学生俱乐部(Microsoft Imagine),点击右上角“注册”按钮; 选择“学生”选项,并填写相关信息,包括姓名、所在国家、出生日期、邮箱等; 接下来,选择“验证方式”,可以通过学校邮箱或学生证明进行验证; 在完成验证后,您需要等待微软对您的账号验证,一般需要1-…

    other 2023年6月26日
    00
  • vue 2.x 中axios 封装的get 和post方法

    下面我来讲解一下“vue 2.x 中axios 封装的get 和post方法”的完整攻略。 1. 安装axios 在使用axios之前,需要先安装axios。可以使用npm进行安装,命令如下: npm install axios –save 安装完成之后,需要在项目中引入axios: import axios from ‘axios’ 2. 创建axios…

    other 2023年6月25日
    00
  • Java设计模式之模板方法模式Template Method Pattern详解

    Java设计模式之模板方法模式Template Method Pattern详解 概述 模板方法模式是一种行为设计模式。在该模式中,有一个抽象类作为模板,其中定义了算法的骨架,具体实现延迟到子类中。这种模式属于行为型模式。 在模板方法模式中,父类定义一个模板方法,该方法作为算法的骨架,而实际的子类实现会覆盖其中的某些步骤,但是整个算法的骨架不会改变。 实现 …

    other 2023年6月26日
    00
  • android触摸事件motionevent详解

    Android触摸事件MotionEvent详解 在Android应用程序中,触摸事件是非常重要的。MotionEvent类提供了有关触摸事件的详信息,包括触摸位置、触摸动作和触摸时间等。以下是有关Android触事件MotionEvent的详细信息。 MotionEvent类 MotionEvent类提供了有关摸事件的详细信息以下是MotionEvent类…

    other 2023年5月6日
    00
  • Python实现的单向循环链表功能示例

    接下来我将为大家详细讲解Python实现的单向循环链表的功能示例。 单向循环链表的基本概念 单向循环链表是指链表中每个节点都保存了下一个节点的地址信息,最后一个节点的地址信息指向第一个节点,形成了一个循环链表。在单向循环链表中,可以从任何一个节点开始遍历整个链表。 实现单向循环链表的关键操作 单向循环链表主要包括增加节点、删除节点、遍历节点、搜索节点等操作。…

    other 2023年6月27日
    00
  • 详解Spring Boot配置文件之多环境配置

    一、Spring Boot多环境配置 Spring Boot应用程序包含多个配置文件,它们在不同的环境中为应用程序提供不同的设置和值。Spring Boot支持基于应用程序配置文件的多个环境。我们可以使用以下方式进行多环境配置: 在application.properties文件中定义应用程序的默认属性 在application-{profile}.prop…

    other 2023年6月25日
    00
  • SpringBoot动态修改yml配置文件的方法详解

    SpringBoot动态修改yml配置文件的方法详解 在SpringBoot开发中,我们常常需要在运行时动态地修改yml配置文件中的一些属性,从而可以快速地调整应用程序的行为。本文将详细讲解SpringBoot动态修改yml配置文件的方法。 思路 我们可以通过读取yml配置文件,解析其中的属性值,并且在运行时通过设置属性值的方式来动态修改配置文件中的属性。S…

    other 2023年6月25日
    00
  • win10 cmd提示不是内部或外部命令怎么办 三种方法修复错误提示

    下面是对于“win10 cmd提示不是内部或外部命令怎么办”的完整攻略。 1. 问题说明 在使用 Windows 10 中的命令提示符时,如果你输入了某些在系统中不存在的命令,就会出现类似于“不是内部或外部命令,也不是可运行的程序或批处理文件”等错误提示。这表明你输入的命令不存在或者路径配置不正确。 2. 解决方法 下面介绍三种常见的解决方法: 2.1 添加…

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