原创

Python套接字

客户端/服务器架构

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

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

套接字:通信的端点

套接字

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

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('...')

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python因特网客户端编程

    底层网络通信协议使用的是套接字,当我们需要进行文件传输、阅读、发送接收电子邮件时,使用的协议与套接字的客户端/服务器端相似,唯一去的区别在于使用TCP/IP这样...

    用户4845306
  • python编程之网络基础

    1 套接字是一种具有通讯端点概念的计算机网络数据结构,网络化的应用程序在开始任何通讯之前都必须要建立套接字。

    py3study
  • selec/poll中的读写事件和epoll中的读写事件

    在Linux网络编程中,常常使用select和poll来做事件触发,监听socket的读写状态,然后进行读写操作。现在新的linux内核中,增加了epoll事件...

    李海彬
  • pythonnet-网络编程(1)

    python的网络编程有不少难点,也容易忘记,最近我会陆续发出系统、完整pythonnet知识的博客,一边复习一边分享,感兴趣的可以关注我。

    py3study
  • 套接字

    版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.ne...

    zy010101
  • Linux C Socket Api详解

    以前都只是在网上搜的能用的例子,对一些参数不是很清楚,这次汇总。而且网络通信还是很常用的通信手段。

    用户5908113
  • 并发篇-python套接字

    小团子
  • 【剑指Offer】替换空格

    但是,显然这种已经有的方法不是面试官想要得到的答案,所以你得另寻方法,自己写个方法,如果写不出,那肯定给面试官不能留下一个好的印象。

    silentcow
  • python学习笔记

    孤独的明月
  • Java 手机号正则

    zcqshine

扫码关注云+社区

领取腾讯云代金券