当前位置: 首页 > article >正文

Python套接字

1、网络协议

  TCP / IP 是设备用于在 Internet 和大多数本地网络上进行通信的一组协议。 TCP 更可靠,具有大量错误检查并需要更多资源。 HTTP,SMTP 或 FTP 等服务使用它。 UDP 的可靠性要差得多,错误检查的能力也有限,所需资源也更少。 VoIP 等服务使用它。

  socket.SOCK_STREAM用于为 TCP 创建套接字,而socket.SOCK_DGRAM为 UDP 创建套接字。

2、地址族

  创建套接字时,必须指定其地址族,在套接字中使用该类型。

  • AF_UNIX,AF_LOCAL-本地通讯
  • AF_INET-IPv4 Internet 协议
  • AF_INET6-IPv6 Internet 协议
  • AF_IPX-IPX-Novell 协议
  • AF_BLUETOOTH-无线蓝牙协议
  • AF_PACKET-底层数据包接口

  对于AF_INET地址族,指定了一对(主机,端口)。 host是一个字符串,表示互联网域表示法中的主机名(如example.com)或 IPv4 地址(如93.184.216.34),并且 port 是整数。

4、通过域名获取IP地址
import socket
ip = socket.gethostbyname("geek-docs.com")
print(ip)

5、socket
TCP ipv4
import socket
# 创建用于IPV4的TCP套接字
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:

    # 工作时间服务器的主机名和端口
    host = "time.nist.gov"
    port = 13

    # 连接到远程套接字
    s.connect((host, port))
    # 将数据发送到套接字。套接字必须连接到远程套接字。从字节发送数据,直到发送完所有数据或发生错误为止
    s.sendall(b'')
    print(str(s.recv(4096), 'utf-8'))



 HEAD请求:HEAD 请求是没有消息正文的 GET 请求。 请求/响应的标头包含元数据,例如 HTTP 协议版本或内容类型。
import socket

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect(("webcode.me", 80))
    s.sendall(b"HEAD / HTTP/1.1\r\nHost: webcode.me\r\nAccept: text/html\r\n\r\n")
    print(str(s.recv(1024), 'utf-8'))


GET 请求:请求指定资源的表示形式。 使用 GET 的请求应仅检索数据
import socket

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect(("webcode.me", 80))
    # 对于 HTTP 1.1 协议,默认情况下,连接可以是持久的。 这就是为什么我们发送Connection: close标头的原因。
    s.sendall(b"GET / HTTP/1.1\r\nHost: webcode.me\r\nAccept: text/html\r\nConnection: close\r\n\r\n")

    while True:
        data = s.recv(1024)
        if not data:
            break
        print(data.decode())


回显客户端服务器示例

import socket
import time

with socket.socket() as s:

    host = 'localhost'
    port = 8001

    s.bind((host, port))
    print(f'socket binded to {port}')

    s.listen()

    con, addr = s.accept()

    with con:

        while True:

            data = con.recv(1024)

            if not data:
                break

            con.sendall(data)

异步服务器
import asyncio

async def handle_client(reader, writer):
    data = (await reader.read(1024))
    writer.write(data)
    writer.close()

loop = asyncio.get_event_loop()
loop.create_task(asyncio.start_server(handle_client, 'localhost', 8001))
loop.run_forever()


http://www.kler.cn/a/314220.html

相关文章:

  • 力扣 LeetCode 541. 反转字符串II(Day4:字符串)
  • C#从入门到放弃
  • Python中的HTML
  • C/C++语言基础--C++模板与元编程系列六,C++元编程相关库的讲解与使用
  • Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解
  • 三维测量与建模笔记 - 特征提取与匹配 - 4.2 梯度算子、Canny边缘检测、霍夫变换直线检测
  • 淘宝扭蛋机小程序,扭蛋机文化下的新体验
  • Flutter 踩坑记录分享(持续更新)
  • mockito+junit搞定单元测试(2h)
  • 前端JavaScript导出excel,并用excel分析数据,使用SheetJS导出excel
  • C++ 笔试常用算法模板
  • 在 Qt 中使用 QLabel 设置 GIF 动态背景
  • 【后端开发】JavaEE初阶—线程的理解和编程实现
  • C#用SDK打开海康工业相机,callback取图Bitmap格式,并保存
  • 如何使用ssm实现基于Web的数字家庭网站设计与实现+vue
  • Netty+HTML5+Canvas 网络画画板实时在线画画
  • 嵌入式 开发技巧和经验分享
  • 电脑ip地址怎么换地区:操作步骤与利弊分析
  • Elasticsearch如何排序,分页以及高亮查询
  • Rust GUI框架 tauri V2 项目创建
  • 如何安装部署kafka
  • JAVA自助高效安全无人台球茶室棋牌室系统小程序源码
  • 篮球运动场景物体检测系统源码分享
  • 解决在Nignx下Thinkphp路由不生效问题
  • 音视频入门基础:AAC专题(7)——FFmpeg源码中计算AAC裸流每个packet的size值的实现
  • 计算机网络(八) —— Udp协议