网络编程

网络编程

    python2.x/python3.x 对于网络编程的支持都是非常友好的,本身支持两部分非常有用的网络编程方式:
        传统网络编程
        非阻塞异步网络编程
    底层通过套接字 socket 对象的连接,完成多种协议的网络程序服务端/客户端的开发和数据通信。

SOCKET

socket的由来

    socket 是一种计算机网络数据结构,中文译名:套接字。

    20 世纪 70 年代,socket 是作为加利福尼亚大学的伯克利版本 Unix 系统的一部分出现的某些情况下也会被称为伯克利套接字或者 BSD 套接字。

    socket 最初是为同一主机上的应用程序创建,是主机上运行的一个程序与另一个程序之间可以完成数据通信操作,程序也称为进程,就出现了不同进程间进行数据交互的操作,因为交互的模式不同,所以也一般将程序中的套接字区分为两种:
        面向文件的套接字:通过文件进行数据交互
        面向网络的套接字:通过网络进行数据交互

    套接字最初出现之后,为了区分不同平台不同体系的套接字模型对象,定义了地址家族的概念:Adress Family,也经常简写为 AF。

    Unix 系统中的套接字就是第一种家族套接字,称为 AF_UNIX,或AF_LOCAL,这是 POSIX1标准中规范的。

    同样也有一些体系平台下,对于套接字的划分通过协议家族(Protocal Family)进行规范,可以简写为 PF,考虑到兼容性的要求,PF 和 AF 在一些平台上都集成了互相兼容的实现,python 本身支持的是更加标准化的 AF 地址家族。

    另一种地址家族就是面向网络的套接字模型对象了,经典的如 AF_INET 支持的是传统第四个版本的因特网协议寻址[IPv4],同时也提供了 AF_INET6 用于支持第六个版本的因特网协议寻址[IPv6]。

PYTHON中的套接字

    套接字模型对象,为了能明确的表示网络中一台数据交互的主机,需要通过 IP 地址寻址确定主机位置,通过 PORT 端口号确定主机交互接口在网络套接字交互过程中,出现了两种类型的套接字模型:
        面向连接的套接字模型
        面向无连接的套接字模型

    面向连接的套接字模型,在进行网络数据传输过程中,首先要创建一个连接模型,通过指定的连接模型进行数据的交互,类似我们生活中拨打电话一样,首先保证通话连接的基础上才能完成通话内容的交互,比较经典的如 TCP 端对端传输协议就是面向连接的套接字对象。

    面向无连接的套接字模型,在进行网络数据传输过程中,不需要有效的网络连接模型,在数据传输过程中只负责发送/接受,不保证数据的完整性和实效性;类似我们生活中的广播电台、电视信号等等,操作效率要比面向连接的套接字模型更加高效;比较经典的 UDP 广播协议使用的就是面向无连接的套接字对象。

    python 中提供的网络连接套接字,主要包含在 socket 模块中。
    socket 模块提供了 socket()函数可以完成如上描述的各种网络套接字的构建、通信等操作。

基本语法结构

socket.socket(socket_family, socket_type, protocal=0)
socket_family:socket 地址家族,AF_UNIX/AF_LOCAL 或者 AF_INET
socket_type:socket 连接类型
面向连接的(SOCK_STREAM),面向无连接的(SOCK_DGRAME)
protocal:传输协议,一般不用设置,使用默认值进行自动匹配就好

创建 TCP 协议的套接字 socket 对象:

tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

创建 UDP 协议的套接字 socket 对象:

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

socket套接字常用操作
属性 描述
s.bind() 绑定(主机名称、端口)到一个套接字上
s.listen() 设置并启动TCP监听
s.accept() 等待客户端连接
s.connect() 连接指定服务器
s.connect_ex() 连接指定服务器
s.recv() 接收TCP消息
s.recv_into 接收TCP消息到缓冲区
s.send() 发送TCP消息
s.sendall() 完整发送TCP消息
s.recvfrom() 接收UDP消息
s.recvfrom_into() 接收UDP消息到缓冲区
s.sendto() 发送UDP消息
s.shutdown() 关闭连接对象
s.close() 关闭套接字对象
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,501评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,673评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,610评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,939评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,668评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,004评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,001评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,173评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,705评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,426评论 3 359
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,656评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,139评论 5 364
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,833评论 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,247评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,580评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,371评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,621评论 2 380

推荐阅读更多精彩内容