我是靠谱客的博主 优雅花瓣,最近开发中收集的这篇文章主要介绍Socket套接字,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Socket

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层。
Socket利用三元组(IP地址,协议,端口)可以唯一标识进程,在不同的计算机中通信。

socket官方文档https://docs.python.org/3/library/socket.html

Socket()函数

用 socket()函数来创建套接字,语法格式如下:

socket.socket([family[, type[, proto]]])

fimaly:套接字家族,常用AF_INET
type:两端点的通信类型,SOCK_STREAM流式套接字,用于面向连接的协议(TCP);SOCK_DGRAM数据报套接字,用于面向无连接的协议(UDP);SOCK_RAW原始套接字,常用在ICMP。
protocol:用于标识域和类型中的协议的变体,通常缺省,默认为0。
只有相同类型的套接字才能通信。

Socket内建方法

服务器:
s.bind((host,port)):绑定地址(host,port)到套接字。
s.listen(backlog):设置并启动TCP侦听器。backlog 指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为 1,常设为 5 。
s.accept(): 被动接受TCP客户端连接,(阻塞式)等待连接的到来。

客户端:
s.connect(address):主动初始化TCP服务器连接。
s.connect_ex(address):connect()函数的扩展版本,出错时返回出错码,而不是抛出异常。

公共用途:
s.recv(bufsize[,flags]):接收 TCP 数据,数据以字符串形式返回,bufsize 指定要接收的最大数据量。
s.send(bytes[,flags]):发送 TCP 数据,将 string 中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于 string 的字节大小。
s.recvfrom(bytes[,flags]):接收 UDP 数据,但返回值是(bytes,address)。
s.sendto(bytes[,flags],address):发送 UDP 数据,将数据发送到套接字,address 是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。
s.settimeout(timeout):设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如connect())。

菜鸟教程:https://www.runoob.com/Python/python-socket.html

Socket通信流程

在这里插入图片描述
参考博客;https://www.cnblogs.com/liqb/p/9371748.html

例子

1.回声服务器
echo-server.py:

#!/usr/bin/env python3

import socket

HOST = '127.0.0.1'  # Standard loopback interface address (localhost)
PORT = 65432        # Port to listen on (non-privileged ports are > 1023)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)

echo-client.py:

#!/usr/bin/env python3

import socket

HOST = '127.0.0.1'  # The server's hostname or IP address
PORT = 65432        # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)

print('Received', repr(data))

官方文档:https://realpython.com/python-sockets/#echo-client-and-server
分析参考:https://zhuanlan.zhihu.com/p/44722743

最后

以上就是优雅花瓣为你收集整理的Socket套接字的全部内容,希望文章能够帮你解决Socket套接字所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部