资讯专栏INFORMATION COLUMN

python网络编程

xuhong / 2041人阅读

摘要:在任何类型的通信开始之前,网络应用程序必须创建套接字。基于文件的套接字,家族名又名基于网络的套接字,家族名在和后续的版本中,支持的套接字有,,,。中的网络编程在中主要是用模块来实现基于套接字的网络通信。

python学习记录--网络编程
1、套接字介绍

一台机器上的不同进程之间进行通信可以利用队列,管道等,但是不同机器之间的进程进行通信用队列是不行的,解决这个问题就是网络套接字。

套接字是计算机网络数据结构,它体现了通信端点的概念。在任何类型的通信开始之前,网络应用程序必须创建套接字。可以将它比作电话插孔,没有它无法进行通信。

套接字最初是为同一主机上的应用程序所创建,使得主机上一个程序(进程)可以和主机上另外一个程序互相通信,也就是所谓的进程间通信。有两种类型的套接字:基于文件和基于网络的。

基于文件的套接字,家族名:AF_UNIX(又名:AF_LOCAL)

基于网络的套接字,家族名:AF_INET

在python2.5和后续的版本中,支持的套接字有:AF_UNIX,AF_INET,AF_TICP,AF_NETLINK。python中的网络编程主要是AF_INET。

1.1、套接字地址:主机+端口
如果一个套接字像一个电话插孔——允许通信的一些基础设施,那么主机名和端口号就像区号和电话号码的组合。
有效的端口号范围为 0~65535(小于 1024 的端口号预留给了系统)。

1.2、面向连接和无连接的套接字
python中创建面向连接(TCP协议)的套接字必须使用SOCK_STREAM作为套接字类型,而创建无连接(UDP协议)的套接字必须使用SOCK_DGRAM作为套接字类型。

2、python中的网络编程

在python中主要是用socket模块来实现基于套接字的网络通信。
2.1、socket()模块函数
使用socket.socket()函数创建套接字,一般语法格式如下:

import socket
socket(socket_family,socket_type,protocol=0)

#其中,socket_family就是AF_UNIX或者AF_INET等,
#socker_type是SOCK_DGRAM或者SOCK_STREAM,
#protocol通常省略,默认为0

创建一个TCP/IP套接字,可以用下面方式调用socket.socket()。

tcpSocket = socket.socket(socket.AF_INET,socket.SCOK_STREAM)

创建一个UDP/IP套接字,可以用下面方式调用socket.socket()。

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

如果用"from socket import *"导入模块的话,创建套接字就可以节省很多代码,例如创建一个UDP/IP套接字。

from socket import *
udpSock = socket(AF_INET,SOCK_DGRAM)

有了套接字对象,就可以使用套接字对象方法进行交互。

2.2、套接字方法
常见的套接字方法:

方法名 描述
s.send() 发送TCP消息
s.sendto() 发送UDP消息
s.recv() 接收TCP消息
s.recvfrom() 接收UDP消息
s.close() 关闭套接字
s.bind() 将地址(主机名+端口号对)绑定到套接字上
3、UDP服务器

3.1 UDP协议
UDP协议--是一个简单的面向数据报的运输层协议,它不提供可靠性,它把应用程序传给IP层的数据报发出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

UDP是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

3.2 UDP特点
UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

【适用情况】

UDP是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的,UDP一般用于多点通信和实时的数据业务,比如

语音广播

视频

QQ

TFTP(简单文件传送)

SNMP(简单网络管理协议)

RIP(路由信息协议,如报告股票市场,航空信息)

DNS(域名解释)

注重速度流畅
UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。

3.3 创建UDP服务器
创建UDP服务器的大体框架,由于UDP是面向无连接的,所以除了等待传入的连接之外,几乎不需要做其他工作。

from socket import *
#创建服务器套接字
udpSocket = socket.socket(AF_INET,SOCK.DGRAM) 

#绑定服务器套接字
udpSocket.bind(port) 

#服务器无限循环,等待连接
while True: 
    #接受客户端传入/发送数据
    cs = udpSocket.recvfrom()/udpSocket.sendto(xxx)
    #关闭套接字
    udpSocket.close()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42960.html

相关文章

  • 学习Python:做数据科学还是网站开发?

    摘要:属于前一种,而且日益被用于数学计算机器学习和多种数据科学应用。近来,由于拥有多个针对机器学习自然语言处理数据视觉化数据探索数据分析和数据挖掘的插件,丰富的数据科学生态体系得到了较大的发展,甚至有将数据科学社区化的趋势。 译者注:本文的英文原文地址是:Python for Data Science vs Python for Web Development,发布时间是10月29日。译者一...

    neu 评论0 收藏0
  • 编程书单:十本Python编程语言的入门书籍

    摘要:本文与大家分享一些编程语言的入门书籍,其中不乏经典。全书贯穿的主体是如何思考设计开发的方法,而具体的编程语言,只是提供一个具体场景方便介绍的媒介。入门入门容易理解而且读起来幽默风趣,对于编程初学者和语言新手而言是理想的书籍。 本文与大家分享一些Python编程语言的入门书籍,其中不乏经典。我在这里分享的,大部分是这些书的英文版,如果有中文版的我也加上了。有关书籍的介绍,大部分截取自是官...

    desdik 评论0 收藏0
  • Python猫荐书系列之七:Python入门书籍有哪些?

    摘要:正好,最近又有几位不同身份的初学者来咨询,要我推荐几本入门书籍,而我们荐书系列已经停更了两个多月,所以,本期荐书就来推荐一些入门书籍吧。为了准备这期荐书,我专门搜集了本入门书籍,现在全部加入到了一份豆瓣豆列里,方便大家查看。 showImg(https://segmentfault.com/img/remote/1460000019299066?w=4790&h=3193); 本文原创...

    Joyven 评论0 收藏0
  • 零基础如何学爬虫技术

    摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...

    KunMinX 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<