前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python套接字

Python套接字

原创
作者头像
用户4845306
修改于 2019-03-14 10:01:41
修改于 2019-03-14 10:01:41
1.6K0
举报

客户端/服务器架构

服务器首先会创建一个通信端点,它能够使服务器监听请求。

客户端所需要做的只是创建它的单一通信端点,然后建立一个到服务器的连接。

套接字:通信的端点

套接字

有两种类型的套接字:基于文件的和面向网络的

IPC:进程间通信

Python只支持AF_UNIX(基于文件)、AF_NETLINK(使用标准的BSD套接字接口进行用户级别和内核级别代码之间的IPC)、AF_TIPC(透明的进程间通信)、AF_INET(基于网络)家族。

套接字地址:主机-端口对

一个网络地址由主机名和端口号对组成,有效的端口号范围为0-65535(小于1024的端口号预留给了系统)。

面向连接的套接字与无连接的套接字

面向连接的套接字

面向连接的套接字:在进行通信之前必须先建立一个连接。这种类型的通信也称为虚拟电路或流套接字

实现这种连接类型的主要协议是传输控制协议(TCP。为了创建TCP套接字,必须使用SOCK_STREAM作为套接字类型。AF_INET的网络版本通常使用因特网协议(IP)来搜寻网络中的主机,所以整个系统通常结合这两种协议(TCP/IP)来进行。

无连接的套接字

与虚拟电路形成鲜明对比的是数据报类型的套接字,它是一种无连接的套接字。实现这种连接类型的主要协议是用户数据报协议(UDP。为了创建UDP套接字,必须使用SOCK_DGRAM(即datagram)作为套接字类型。因为这些套接字也使用因特网协议来搜寻网络中的主机,所以这个系统也称作UDP/IP

Python中的网络编程

Socket详细介绍

TCP服务器端工作流程

  1. 创建服务器端套接字A
  2. 将套接字A与地址B使用bind函数绑定
  3. 使用listen函数使服务器开始监听
  4. 使用accept函数返回新的套接字对象C及其地址
  5. 使用C的recv函数接受发送到服务器端的数据
  6. 使用C的send函数发送数据

每次接收到一个新的连接就会在服务器端创建一个新的套接字来负责与该连接进行信息的交换

TCP客户端工作流程

  1. 创建套接字A
  2. 使用A的connect函数及服务器所在地址连接服务器
  3. 使用A的send函数发送数据
  4. 使用A的recv函数接受数据

注意,不管是服务器端还是客户端,发送数据时,一定是发送的bytes类型的(Python3中),对于字符串类型,需要使用str.encode('...')进行编码;接受数据时,所接收到的数据类型一定是bytes类型的(Python3中),需要使用相同的编码格式进行解码,即bytes.decode('...')

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
利用tcpcopy引流做模拟在线测试
一、工具介绍 Tcpcopy是一个分布式在线压力测试工具,可以将线上流量拷贝到测试机器,实时的模拟线上环境,达到在程序不上线的情况下实时承担线上流量的效果,尽早发现bug,增加上线信心。 Tcpcopy是由网易技术部于2011年9月开源的一个项目,现在已经更新到0.4版本。 与传统的压力测试工具(如:abench)相比,tcpcopy的最大优势在于其实时及真实性,除了少量的丢包,完全拷贝线上流量到测试机器,真实的模拟线上流量的变化规律。 二、Tcpcopy的原理 1.流程 现在以nginx作为前端说明tcp
小小科
2018/05/03
1.5K0
Linux用户空间与内核空间通信(Netlink通信机制)
Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式,一般不用Netlink。除非需要用到Netlink的广播特性时。
嵌入式Linux内核
2022/10/25
4.9K2
Linux用户空间与内核空间通信(Netlink通信机制)
socket使用方法_socket调试工具怎么用
socketpair函数概要如下: #include <sys/types.h> #include <sys/socket.h> int socketpair(int domain, int type, int protocol, int sv[2]); sys/types.h文件需要用来定义一些C宏常量。sys/socket.h文件必须包含进来定义socketpair函数原型。 socketpair函数需要四个参数。他们是: 套接口的域 套接口类型 使用的协议 指向存储文件描述符的指针
全栈程序员站长
2022/11/19
6510
【计网】UDP Echo Server与Client实战:从零开始构建简单通信回显程序
我们之前讲解了关于socket编程的一些基础知识和接口函数,今天我们就来小试牛刀一下,自己编写一个简单的echo_server程序,将客户端的数据在服务端打印出来(利用udp协议实现)!
用户11316056
2024/11/19
1740
【计网】UDP Echo Server与Client实战:从零开始构建简单通信回显程序
UDP服务端和客户端通信代码开发流程
面向无连接的,不稳定的,不可靠,不安全的数据报传递=---更像是收发短信,UDP传输不需要建立连接,传输效率更高,在稳定的局域网内部环境相对可靠
莫浅子
2023/11/03
6180
UDP服务端和客户端通信代码开发流程
【计网】从零开始使用UDP进行socket编程 --- 客户端与服务端的通信实现
我们了解了网络编程的大概,今天我们就来使用UDP协议来实现客户端与服务端之间的通信过程:
叫我龙翔
2024/09/17
2370
day01-从一个基础的socket服务说起
在linux中,一切都是文件,所有文件都有一个int类型的编号,称为文件描述符。服务端和客户端通信本质是在各自机器上创建一个文件,称为socket(套接字),然后对该socket文件进行读写。
会玩code
2022/04/24
1.2K2
day01-从一个基础的socket服务说起
内核通信之 Netlink 源码分析和实例分析
这几天在看 ipvs 相关代码的时候又遇到了 netlink 的事情,所以这两天花了点时间重新把 netlink 的事情梳理了一下。
黑光技术
2020/07/31
3.4K0
内核通信之 Netlink 源码分析和实例分析
第14章 高级I/O函数
设置套接字时间限制: 1、使用alarm函数和SIGALRM信号 2、使用由select提供的时间限制 3、使用SO_RCVTIMEO和SO_SNDTIMEO套接字选项 #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, const void *buf, size_t count); #include<sys/uio.h> struct iovec { void* iov_
_gongluck
2018/03/09
6680
第14章 高级I/O函数
Linux Netlink
When you are writing a linux application that needs either kernel to userspace communications or userspace to kernel communications, the typical answer is to use ioctl and sockets.
heidsoft
2023/03/18
1.2K0
Linux Netlink
Librdkafka的Transport层
rd_kafka_recv按kafka的协议来收包, 先收4字节,拿到payload长度, 再根据这个长度收够payload内容, 这样一个完整的response就接收到了
扫帚的影子
2018/09/05
1.5K0
20.7 OpenSSL 套接字SSL加密传输
OpenSSL 中的 SSL 加密是通过 SSL/TLS 协议来实现的。SSL/TLS 是一种安全通信协议,可以保障通信双方之间的通信安全性和数据完整性。在 SSL/TLS 协议中,加密算法是其中最核心的组成部分之一,SSL可以使用各类加密算法进行密钥协商,一般来说会使用RSA等加密算法,使用TLS加密针对服务端来说则需要同时载入公钥与私钥文件,当传输被建立后客户端会自行下载公钥并与服务端完成握手,读者可将这个流程理解为上一章中RSA的分发密钥环节,只是SSL将这个过程简化了,当使用时无需关注传输密钥对的问题。
微软技术分享
2023/11/06
4520
20.7 OpenSSL 套接字SSL加密传输
linux网络编程之socket(十六):通过UNIX域套接字传递描述符和 sendmsg/recvmsg 函数
s1mba
2017/12/28
2.9K0
linux网络编程之socket(十六):通过UNIX域套接字传递描述符和 sendmsg/recvmsg 函数
UNIX域协议(无名套接字)
关于什么是UNIX域套接字可以参考:https://cloud.tencent.com/developer/article/1018893 这里主要介绍非命名的UNIX域套接字的用法。 1.socketpair函数 先看man手册: SYNOPSIS        #include <sys/types.h>          /* See NOTES */        #include <sys/socket.h>        int socketpair(int domain, int typ
xcywt
2018/01/12
7890
【Linux网络编程】Socket编程--UDP:实现服务器接收客服端的消息
<font color= black face="楷体" size=3><center>🌈个人主页:南桥几晴秋
南桥
2024/10/24
1390
【Linux网络编程】Socket编程--UDP:实现服务器接收客服端的消息
socketpair的使用
socketpair函数概要例如以下: #include <sys/types.h> #include <sys/socket.h> int socketpair(int domain, int type, int protocol, int sv[2]); sys/types.h文件须要用来定义一些C宏常量。sys/socket.h文件必须包括进来定义socketpair函数原型。 socketpair函数须要四个參数。他们是: 套接口的域 套接口类型 使用的协议 指向存储文件描写叙述符的指针
全栈程序员站长
2022/07/14
5220
Linux网络编程API(一)
htonl即”host to network long”, 即长整型(32bit)的主机字节序转换未网络字节序数据。
doper
2022/09/26
1.4K0
Linux网络编程API(一)
recvfrom函数
RECV(2) Linux Programmer’s Manual RECV(2)
全栈程序员站长
2022/09/15
5570
几种server模型
每次执行客户程序,在命令行參数指定server的ip地址,port,发起连接的子进程数,和一个待发送的字符串数据,客户程序将模拟多个客户依据指定的子进程数创建子进程来并发的连接到server,并发送数据,server收到数据后都原样的回发给客户,是一点典型的回射server。
全栈程序员站长
2022/07/10
2370
几种server模型
TCP服务器和客户端基础功能实现和要点解析
tankaro
2025/01/23
1060
推荐阅读
相关推荐
利用tcpcopy引流做模拟在线测试
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文