Python socket 基础(Client) - Foundations of Python Socket
- Python socket 基础- Foundations of Python Socket
- 建立socket - establish socket
- import socket
- s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- # s = 通信类型(type) + 协议家族(protocol)
- # AF_INET = IPV4 ; AF_INET6 = IPV6
- # SOCK_STREAM = TCP ; SOCK_DGRAM UDP
- s.connect(("www.zzyzz.top",80))
- # s.connect((IP,PORT))
- # python 中 socket 对象的 connect()方法会利用 DNS 把域名解析成 IP
- 寻找端口号 - detect the port
- port = socket.getservbyname('http','TCP')
- # 查询系统特定服务的端口号, 小于1024 由 IANA(Internet Assigned Numbers Authority)分配.
- # socket.getservbyname( protocol name, port name)
- 从 socket 获取信息 - get info. from socket
- sname = s.getsockname()
- # 返回一个 tuple (client IP, client port), 对于客户端, 端口号由操作系统分配
- pname = s.getpeername()
- # 得到一个 tuple (sever IP, server port)
- socket 通信 - communication via socket
- python 提供了 2 种通信方式:socket 对象 和 文件类对象
- socket 对象的方法,
- send()
- sendto()
- recv()
- recvfrom()
- 文件类对象对应的方法,
- read()
- write()
- readline()
- 异常处理 - process exceptions
- python 的 socket 模块定义了 4 种可能出现的异常,
- socket.error , 与 I/O 和 通信 有关的异常
- socket.gaierror , 与 查询地址信息有关的异常
- socket.herror , 与其他地址错误相关的异常
- socket.timeout , 超时有关的异常(在一个 socket 对象上调用 settimeout())
- 例子,
- try:
- s.connect(("www.zzyzz.top", 80))
- except socket.gaierror as e:
- print("Address related error : %s" % e)
- except socket.error as e:
- print("Connection error : %s" % e)
- output,
- #1 Address related error : [Errno 11001] getaddrinfo failed -> socket.gaierror
- #2 Connection error : [WinError 10060] A connection attempt -> socket.error
- failed because the connected party did not properly respond
- after a period of time, or established connection failed
- because connected host has failed to respond
- socket 模块可以把域名转换成IP地址(DNS), 有可能看到两中错误,
- 一种是域名错误,会得到 socket.gaierror , 另一种是链接远程 server 的 socket.error.
- 完整的 socket 建立的例子,
- socket 对象类通信示例,
- import socket
- try:
- s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- except socket.error as e:
- print("Error at creating socket : %s" % e)
- try:
- s.connect(("www.zzyzz.top", 80))
- except socket.gaierror as e:
- print("Address related error : %s" % e)
- except socket.error as e:
- print("Connection error : %s" % e)
- try:
- s.send("HELLO THERE!".encode())
- except socket.error as e:
- print("Error at sending data : %s" % e)
- try:
- s.shutdown(1)
- except socket.error as e:
- print("Error at sending data(shutdown) : %s" % e) #数据只有在调用了 shutdown() 方法后才能确保被发送.
- while 1:
- try:
- recv = s.recv(1024)
- except socket.error as e:
- print("Error at receiving data : %s" % e)
- if not len(recv):
- print("Data received")
- break
- 文件类对象通信示例,
- 可以通过 makefile() 方法从 socket 对象得到一个文件类对象,实际上这个文件类对象调用的还是 socket,
- 所以由文件类对象产生的异常和 socket 对象的 send() 和 recv() 方法是一样的.
- import socket
- try:
- s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- except socket.error as e:
- print("Error at creating socket : %s" % e)
- try:
- s.connect(("www.zzyzz.top", 80))
- except socket.gaierror as e:
- print("Address related error : %s" % e)
- except socket.error as e:
- print("Connection error : %s" % e)
- FH = s.makefile('rwb',0) # 第一参数是 模式:读,写,读写; 第二个参数是 buffer size
- try:
- FH.write("HELLO THERE!".encode())
- except socket.error as e:
- print("Error at sending data : %s" % e)
- try:
- FH.flush() # 由于在 makefile() 方法指定了 buffer size 是 0,
- # 所以这例的 flush() 方法的调用时非必须地
- except socket.error as e:
- print("Error at sending data(flush) : %s" % e)
- try:
- s.shutdown(1) # 即使调用 makefile(), 也要保存 socket 对象.
- # makefile() 返回的文件类对象并不提供对 shutdown() 的调用
- # 所以要保存原始 socket 对象, 并在其上调用 shutdown()
- # 数据只有在调用了 shutdown() 方法后才能确保被发送.
- s.close()
- except socket.error as e:
- print("Error at sending data(shutdown) : %s" % e)
- while 1:
- try:
- recv = FH.read(1024)
- except socket.error as e:
- print("Error at receiving data : %s" % e)
- if not len(recv):
- print("Data received")
- break
- Summarize,
对于客户端来说,建立一个 TCP 链接的过程分两步,
1, 建立 socket 对象
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
2, 调用 connect() 方法, 建立跟服务断(server)的链接.
s.connect(("www.zzyzz.top", 80))
Python socket 基础(Client) - Foundations of Python Socket的更多相关文章
- Python socket 基础(Server) - Foundations of Python Socket
Python socket 基础 Server - Foundations of Python Socket 通过 python socket 模块建立一个提供 TCP 链接服务的 server 可分 ...
- AndroidAsync :异步Socket,http(client+server),websocket和socket.io的Android类库
AndroidAsync是一个用于Android应用的异步Socket,http(client+server),websocket和socket.io的类库.基于NIO,没有线程.它使用java.ni ...
- Python零基础学习系列之三--Python编辑器选择
上一篇文章记录了怎么安装Python环境,同时也成功的在电脑上安装好了Python环境,可以正式开始自己的编程之旅了.但是现在又有头疼的事情,该用什么来写Python程序呢,该用什么来执行Python ...
- Python零基础学习系列之四--Python程序设计思想
前面我们把Python环境安装成功,同时也选择了自己合适的IDE工具来开启自己的编程之旅. 那么今天来说说怎么编程,程序设计需要什么步骤,我们应该怎么做才能编写自己的程序. 1-1.程序设计方法: I ...
- 【python语法基础-经典练习题】python语法基础练习题01---商场打折
# 1.一家商场在降价促销.如果购买金额50-100元(包含50元和100元)之间,会给10%的折扣(打九折),# 如果购买金额大于100元会给20%折扣.编写一程序,询问购买价格,再显示出折扣(%1 ...
- 大牛整理最全Python零基础入门学习资料
大牛整理最全Python零基础入门学习资料 发布时间:『 2017-11-12 11:56 』 帖子类别:『人工智能』 阅读次数:3504 (本文『大牛整理最全Python零基础入门学习资料 ...
- php Socket基础
◆ Socket 基础PHP使用Berkley的socket库来创建它的连接.socket只不过是一个数据结构.你使用这个socket数据结构去开始一个客户端和服务器之间的会话.这个服务器是一直在监听 ...
- 【Python】-NO.96.Note.2.Python -【Python 基础】
1.0.0 Summary Tittle:[Python]-NO.95.Note.1.Python -[Python 老男孩 基础]- Style:Python Series:Python Since ...
- Python入门基础学习 三
Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...
随机推荐
- AWS、阿里云、Azure、Google Cloud、华为云、腾讯云 各种云服务器价格收费对比(上)
他来了,他来了~ 他带着六家公有云厂商的资源价格走来了~ 不久前,我们上线了一款小工具——[多云成本计算器]1.0版,公众号菜单栏可以直接体验.详细介绍可以戳这里<3秒即得最低价,速石上线「多云 ...
- 从零开发一款txt小说下载器
在日常开发中,列表是一个非常常用的一个东西,可以用listview和recyclerview实现.当然,由于recyclerview更为实用且强大,它也是更好的方案. 而我以前为了方便,习惯直接拿网上 ...
- Pandas的介绍与基本使用
1.什么是Pandas 当大家谈论到数据分析时,提及最多的语言就是Python和SQL,而Python之所以适合做数据分析,就是因为他有很多强大的第三方库来协助,pandas就是其中之一,它是基于Nu ...
- python3迭代器
一.前提 1.dir()函数 dir()函数带参数时,返回参数的属性和方法列表:不带参数时,返回当前范围内变量.方法和定义的类型列表 # dir(参数):带参数,返回参数的属性和方法 s = '' p ...
- maven常用的远程仓库地址
<mirror> <id>nexus-aliyun</id> <name>Nexus aliyun</name> <url>ht ...
- [bzoj1041] [洛谷P2508] [HAOI2008] 圆上的整点
Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. Input 只有一个正整数n,n<=2000 000 000 Output 整点个数 Samp ...
- 机器学习-MNIST数据集使用二分类
一.二分类训练MNIST数据集练习 %matplotlib inlineimport matplotlibimport numpy as npimport matplotlib.pyplot as p ...
- 编写python程序读入1到100之间的整数,然后计算每个数出现的次数,输入0表示结束输人,输入数据不包括0。如果数出现的大现如果大于1,输出时使用复数times
#-*- coding:UTF-8 -*- #环境:python3 print("Enter the numbers between 1 and 100:") enterList= ...
- nodejs 执行 最近 发现 nodejs 执行的 是非等待的。
上一步结果 没有完成 下一步就执行了 结果就 不行
- Git详解之文件状态
前言 其实文件状态根据不同场景有不同的描述,例如:已跟踪.未跟踪.已暂存.已修改.未修改等等,乱七八糟的,今天个人根据自己的使用经验对其进行分类,如有不同建议或者更好的想法也可以留言评论,万分感谢! ...