python基础之Socket套接字详解

下面是对应的“python基础之Socket套接字详解”的完整攻略。

Python基础之Socket套接字详解

一、什么是Socket套接字

Socket套接字简称Socket,是提供应用程序和网络协议栈之间的接口,通过Socket可以方便地实现应用程序之间的数据传输和网络通信,比如HTTP、SSL、SSH、FTP等各种应用层协议都是基于Socket实现的。

二、Socket套接字基本使用方法

Python通过socket模块实现了Socket套接字的支持,可以很方便地编写网络应用,大致的使用方法如下:

1. 创建套接字

在创建一个基于Socket的网络应用之前,需要先创建一个Socket对象,可以在创建时指定协议族和套接字类型,如下所示:

import socket

# 创建一个IPv4 TCP协议的Socket套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

其中,AF_INET代表IPv4协议族,SOCK_STREAM代表流式Socket套接字类型。

2. 绑定并监听端口

绑定端口用于使客户端和服务端建立连接,端口可以是任意未被占用的端口。使用bind方法可以将端口绑定到Socket对象上。代码如下:

# 绑定到本地IP和端口
s.bind(('127.0.0.1', 8080))

# 监听端口,等待客户端连接
s.listen(5)

此处将端口绑定到本地IP地址127.0.0.1的8080端口,并设置Socket对象的监听队列长度为5。

3. 建立连接

在服务端通过accept方法等待客户端连接,并且返回一个由客户端地址和端口组成的元组,使用该元组可以与客户端进行数据传输。代码如下:

# 等待客户端连接,返回一个由客户端地址和端口组成的元组
client, addr = s.accept()

4. 发送和接收数据

在Socket对象上,可以使用send方法向其它Socket对象发送数据,使用recv方法从其它Socket对象接收数据。用法如下:

# 发送数据
client.send('Hello World!')

# 接收数据
data = client.recv(1024)

# 关闭Socket对象
s.close()

在上述代码中,调用send方法向客户端Socket对象发送数据Hello World!,并使用recv方法接收客户端Socket对象返回的数据,数据的最大传输长度为1024字节。最后,使用close方法关闭Socket对象。

三、Socket套接字示例说明

下面,将通过两个示例对Socket套接字的使用方法进行说明,一个是简单的Echo服务器,另一个是简单的Web服务器。

1. Echo服务器

Echo服务器是一个简单的网络应用,它接收任何来自客户端的字符串,并将其原样返回给客户端。代码如下:

import socket

# 创建一个IPv4 TCP协议的Socket套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定到本地IP和端口
s.bind(('127.0.0.1', 8080))

# 监听端口,等待客户端连接
s.listen(5)

while True:
    # 等待客户端连接,返回一个由客户端地址和端口组成的元组
    client, addr = s.accept()
    print('客户端已连接', addr)

    # 接收数据并将其发送回去
    data = client.recv(1024)
    client.send(data)

    # 关闭连接
    client.close()

在上述代码中,while循环表示程序可以不断接收来自客户端的连接请求,并在每次成功连接后接收数据并将数据原样返回给客户端。

2. 简单的Web服务器

简单的Web服务器可以接收HTTP GET请求并返回一份静态HTML页面。代码如下:

import socket

# 创建一个IPv4 TCP协议的Socket套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定到本地IP和端口
s.bind(('127.0.0.1', 8080))

# 监听端口,等待客户端连接
s.listen(5)

while True:
    # 等待客户端连接,返回一个由客户端地址和端口组成的元组
    client, addr = s.accept()
    print('客户端已连接', addr)

    # 接收数据并解析HTTP请求
    data = client.recv(1024).decode()
    lines = data.split('\r\n')
    _, path, _ = lines[0].split()

    # 返回静态HTML页面
    with open('.' + path, 'rb') as f:
        content = f.read()

    header = 'HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: %d\r\nConnection: close\r\n\r\n' % len(content)
    client.send(header.encode() + content)

    # 关闭连接
    client.close()

在上述代码中,程序在循环中等待客户端连接、接收数据、解析HTTP请求、返回静态HTML页面。为了简单起见,此处直接返回本地文件系统中存在的HTML页面,并没有进行路由和视图等开发。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python基础之Socket套接字详解 - Python技术站

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

相关文章

  • Python3 入门教程 简单但比较不错

    下面是详细的攻略: Python3入门教程简单但比较不错 Python是一种高级编程语言,易于学习和使用。本文将介绍Python3入门教程,帮助初学者快速入门Python编程。 安装Python3 在开始学习Python编程之前,我们需要先安装Python3。Python3可以从官方网站下载,也可以使用包管理器进行安装。下面是在Ubuntu系统上使用包管理器…

    python 2023年5月14日
    00
  • 关于Python的文本文件转换编码问题

    下面我来给您详细讲解一下 “关于Python的文本文件转换编码问题”的完整攻略。 什么是文本文件编码? 在计算机领域中,编码是将字符在计算机内部转换为数字的方式。文本文件的编码是指用来表示文本文件中字符的编码方式。常见的文本编码方式有utf-8、gbk、iso-8859-1等。 文本文件编码转换工具 Python中常用的文本文件编码转换工具是chardet和…

    python 2023年5月20日
    00
  • 非常糟糕的 XML 试图用 Python 解析

    【问题标题】:VERY BAD XML trying to parse with Python非常糟糕的 XML 试图用 Python 解析 【发布时间】:2023-04-01 02:08:01 【问题描述】: 我在购买域名后尝试使用 python 解析 xml 输出。到目前为止,我有: #!/usr/bin/python import sys from B…

    Python开发 2023年4月8日
    00
  • python三引号输出方法

    当我们需要在 Python 中输出长篇文字时,使用三引号输出方法可以避免在每行文字的行末添加换行符,与普通字符串变量的定义方式有所不同。下面是使用三引号方式定义字符串变量的语法: variable_name = ”’ Long text here ”’ 其中 ”’ 表示三个连续的单引号,将所有文本包围在其中,可以在句首句尾包含换行符和缩进。下面进行更详…

    python 2023年5月20日
    00
  • Python中变量的输入输出实例代码详解

    Python中变量输入输出实例代码详解 本文主要介绍Python中变量的输入输出实例代码,包括Python中的标准输入输出和文件的输入输出。 标准输入输出 输入变量 要在Python中输入变量,可以使用内置函数input()。函数参数作为提示信息在屏幕上输出,用户输入变量并按Enter结束输入。 示例代码: # 输入变量并输出 name = input(&q…

    python 2023年5月31日
    00
  • Python使用爬虫爬取静态网页图片的方法详解

    当我们浏览一个网站的时候,经常会看到一些漂亮的图片。如果我们需要将这些图片下载到本地,一个简单的方法就是使用Python写一个爬虫程序来实现。本文将会详细讲解如何使用Python爬虫爬取静态网页图片。 准备工作 在开始编写Python爬虫程序之前,需要安装几个必要的库。通过运行下面的命令可以安装这些库。 pip install requests pip in…

    python 2023年5月14日
    00
  • Python命令行定时任务自动化工作流程

    下面我给您详细讲解一下“Python命令行定时任务自动化工作流程”的完整攻略: 1. 背景介绍 在实际工作中,我们经常需要定时执行某些任务,如每天对数据进行备份、定时发送邮件等。使用Python可以很方便地实现这些定时任务的自动化执行,从而减少工作量,提高效率。 2. 工作流程 Python命令行定时任务自动化工作流程一般包括以下步骤: 安装依赖包:需要安装…

    python 2023年5月19日
    00
  • Python基于PycURL实现POST的方法

    下面是Python基于PycURL实现POST的方法的详细攻略: 什么是PycURL? PycURL是Python的一个库,它能够在Python中通过libcurl使用URL语法来进行网络操作。实际上,它是在Python语言的基础上,通过绑定libcurl库提供的C接口,使用Python的语法实现网络数据的获取和传输。 我们可以使用PycURL进行HTTP网…

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