1. Python socket 基础- Foundations of Python Socket

  2. 建立socket - establish socket
  3. import socket
  4. s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  5. # s = 通信类型(type) + 协议家族(protocol)
  6. # AF_INET = IPV4 ; AF_INET6 = IPV6
  7. # SOCK_STREAM = TCP ; SOCK_DGRAM UDP
  8.  
  9. s.connect(("www.zzyzz.top",80))
  10. # s.connect((IP,PORT))
  11. # python 中 socket 对象的 connect()方法会利用 DNS 把域名解析成 IP
  12.  
  13. 寻找端口号 - detect the port
  14. port = socket.getservbyname('http','TCP')
  15. # 查询系统特定服务的端口号, 小于1024 由 IANA(Internet Assigned Numbers Authority)分配.
  16. # socket.getservbyname( protocol name, port name)
  17.  
  18. socket 获取信息 - get info. from socket
  19. sname = s.getsockname()
  20. # 返回一个 tuple (client IP, client port), 对于客户端, 端口号由操作系统分配
  21. pname = s.getpeername()
  22. # 得到一个 tuple (sever IP, server port)
  23.  
  24. socket 通信 - communication via socket
  25. python 提供了 2 种通信方式:socket 对象 文件类对象
  26. socket 对象的方法,
  27. send()
  28. sendto()
  29. recv()
  30. recvfrom()
  31.  
  32. 文件类对象对应的方法,
  33. read()
  34. write()
  35. readline()
  36.  
  37. 异常处理 - process exceptions
  38. python socket 模块定义了 4 种可能出现的异常,
  39. socket.error , I/O 通信 有关的异常
  40. socket.gaierror , 查询地址信息有关的异常
  41. socket.herror , 与其他地址错误相关的异常
  42. socket.timeout , 超时有关的异常(在一个 socket 对象上调用 settimeout())
  43.  
  44. 例子,
  45. try:
  46. s.connect(("www.zzyzz.top", 80))
  47. except socket.gaierror as e:
  48. print("Address related error : %s" % e)
  49. except socket.error as e:
  50. print("Connection error : %s" % e)
  51.  
  52. output,
  53. #1 Address related error : [Errno 11001] getaddrinfo failed -> socket.gaierror
  54. #2 Connection error : [WinError 10060] A connection attempt -> socket.error
  55. failed because the connected party did not properly respond
  56. after a period of time, or established connection failed
  57. because connected host has failed to respond
  58. socket 模块可以把域名转换成IP地址(DNS), 有可能看到两中错误,
  59. 一种是域名错误,会得到 socket.gaierror , 另一种是链接远程 server socket.error.
  60.  
  61. 完整的 socket 建立的例子,
  62. socket 对象类通信示例,
  63. import socket
  64.  
  65. try:
  66. s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  67. except socket.error as e:
  68. print("Error at creating socket : %s" % e)
  69.  
  70. try:
  71. s.connect(("www.zzyzz.top", 80))
  72. except socket.gaierror as e:
  73. print("Address related error : %s" % e)
  74. except socket.error as e:
  75. print("Connection error : %s" % e)
  76.  
  77. try:
  78. s.send("HELLO THERE!".encode())
  79. except socket.error as e:
  80. print("Error at sending data : %s" % e)
  81.  
  82. try:
  83. s.shutdown(1)
  84. except socket.error as e:
  85. print("Error at sending data(shutdown) : %s" % e) #数据只有在调用了 shutdown() 方法后才能确保被发送.
  86.  
  87. while 1:
  88. try:
  89. recv = s.recv(1024)
  90. except socket.error as e:
  91. print("Error at receiving data : %s" % e)
  92. if not len(recv):
  93. print("Data received")
  94. break
  95.  
  96. 文件类对象通信示例,
  97. 可以通过 makefile() 方法从 socket 对象得到一个文件类对象,实际上这个文件类对象调用的还是 socket,
  98. 所以由文件类对象产生的异常和 socket 对象的 send() recv() 方法是一样的.
  99. import socket
  100. try:
  101. s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  102. except socket.error as e:
  103. print("Error at creating socket : %s" % e)
  104.  
  105. try:
  106. s.connect(("www.zzyzz.top", 80))
  107. except socket.gaierror as e:
  108. print("Address related error : %s" % e)
  109. except socket.error as e:
  110. print("Connection error : %s" % e)
  111.  
  112. FH = s.makefile('rwb',0) # 第一参数是 模式:读,写,读写; 第二个参数是 buffer size
  113. try:
  114. FH.write("HELLO THERE!".encode())
  115. except socket.error as e:
  116. print("Error at sending data : %s" % e)
  117.  
  118. try:
  119. FH.flush() # 由于在 makefile() 方法指定了 buffer size 是 0,
  120. # 所以这例的 flush() 方法的调用时非必须地
  121. except socket.error as e:
  122. print("Error at sending data(flush) : %s" % e)
  123.  
  124. try:
  125. s.shutdown(1) # 即使调用 makefile(), 也要保存 socket 对象.
  126. # makefile() 返回的文件类对象并不提供对 shutdown() 的调用
  127. # 所以要保存原始 socket 对象, 并在其上调用 shutdown()
  128. # 数据只有在调用了 shutdown() 方法后才能确保被发送.
  129. s.close()
  130. except socket.error as e:
  131. print("Error at sending data(shutdown) : %s" % e)
  132.  
  133. while 1:
  134. try:
  135. recv = FH.read(1024)
  136. except socket.error as e:
  137. print("Error at receiving data : %s" % e)
  138. if not len(recv):
  139. print("Data received")
  140. break
  1.   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的更多相关文章

  1. Python socket 基础(Server) - Foundations of Python Socket

    Python socket 基础 Server - Foundations of Python Socket 通过 python socket 模块建立一个提供 TCP 链接服务的 server 可分 ...

  2. AndroidAsync :异步Socket,http(client+server),websocket和socket.io的Android类库

    AndroidAsync是一个用于Android应用的异步Socket,http(client+server),websocket和socket.io的类库.基于NIO,没有线程.它使用java.ni ...

  3. Python零基础学习系列之三--Python编辑器选择

    上一篇文章记录了怎么安装Python环境,同时也成功的在电脑上安装好了Python环境,可以正式开始自己的编程之旅了.但是现在又有头疼的事情,该用什么来写Python程序呢,该用什么来执行Python ...

  4. Python零基础学习系列之四--Python程序设计思想

    前面我们把Python环境安装成功,同时也选择了自己合适的IDE工具来开启自己的编程之旅. 那么今天来说说怎么编程,程序设计需要什么步骤,我们应该怎么做才能编写自己的程序. 1-1.程序设计方法: I ...

  5. 【python语法基础-经典练习题】python语法基础练习题01---商场打折

    # 1.一家商场在降价促销.如果购买金额50-100元(包含50元和100元)之间,会给10%的折扣(打九折),# 如果购买金额大于100元会给20%折扣.编写一程序,询问购买价格,再显示出折扣(%1 ...

  6. 大牛整理最全Python零基础入门学习资料

    大牛整理最全Python零基础入门学习资料 发布时间:『 2017-11-12 11:56 』     帖子类别:『人工智能』  阅读次数:3504 (本文『大牛整理最全Python零基础入门学习资料 ...

  7. php Socket基础

    ◆ Socket 基础PHP使用Berkley的socket库来创建它的连接.socket只不过是一个数据结构.你使用这个socket数据结构去开始一个客户端和服务器之间的会话.这个服务器是一直在监听 ...

  8. 【Python】-NO.96.Note.2.Python -【Python 基础】

    1.0.0 Summary Tittle:[Python]-NO.95.Note.1.Python -[Python 老男孩 基础]- Style:Python Series:Python Since ...

  9. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

随机推荐

  1. AWS、阿里云、Azure、Google Cloud、华为云、腾讯云 各种云服务器价格收费对比(上)

    他来了,他来了~ 他带着六家公有云厂商的资源价格走来了~ 不久前,我们上线了一款小工具——[多云成本计算器]1.0版,公众号菜单栏可以直接体验.详细介绍可以戳这里<3秒即得最低价,速石上线「多云 ...

  2. 从零开发一款txt小说下载器

    在日常开发中,列表是一个非常常用的一个东西,可以用listview和recyclerview实现.当然,由于recyclerview更为实用且强大,它也是更好的方案. 而我以前为了方便,习惯直接拿网上 ...

  3. Pandas的介绍与基本使用

    1.什么是Pandas 当大家谈论到数据分析时,提及最多的语言就是Python和SQL,而Python之所以适合做数据分析,就是因为他有很多强大的第三方库来协助,pandas就是其中之一,它是基于Nu ...

  4. python3迭代器

    一.前提 1.dir()函数 dir()函数带参数时,返回参数的属性和方法列表:不带参数时,返回当前范围内变量.方法和定义的类型列表 # dir(参数):带参数,返回参数的属性和方法 s = '' p ...

  5. maven常用的远程仓库地址

    <mirror> <id>nexus-aliyun</id> <name>Nexus aliyun</name> <url>ht ...

  6. [bzoj1041] [洛谷P2508] [HAOI2008] 圆上的整点

    Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. Input 只有一个正整数n,n<=2000 000 000 Output 整点个数 Samp ...

  7. 机器学习-MNIST数据集使用二分类

    一.二分类训练MNIST数据集练习 %matplotlib inlineimport matplotlibimport numpy as npimport matplotlib.pyplot as p ...

  8. 编写python程序读入1到100之间的整数,然后计算每个数出现的次数,输入0表示结束输人,输入数据不包括0。如果数出现的大现如果大于1,输出时使用复数times

    #-*- coding:UTF-8 -*- #环境:python3 print("Enter the numbers between 1 and 100:") enterList= ...

  9. nodejs 执行 最近 发现 nodejs 执行的 是非等待的。

    上一步结果 没有完成 下一步就执行了 结果就 不行

  10. Git详解之文件状态

    前言 其实文件状态根据不同场景有不同的描述,例如:已跟踪.未跟踪.已暂存.已修改.未修改等等,乱七八糟的,今天个人根据自己的使用经验对其进行分类,如有不同建议或者更好的想法也可以留言评论,万分感谢! ...