Python socket编程实例详解


Posted in Python onMay 27, 2015

本文实例形式较为详细的讲述了Python socket编程。分享给大家供大家参考。具体如下:

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

上面的代码创建了一个socket对象。type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。AF_INET表示创建的是ip v4的类型。
socket(address_family,type,protocol_type):

上面三个参数的含义是:

address_family指明要建立哪一类socket。最常用的当然是ip协议,AF_INET。在unix系统中,AF_UNIX也是比较常用的,用于建立unix系统中的进程间通信。

type用于指定通信类型。通常是建立面向连接的流通信。SOCKET_DGRAM是报文通信。如果address_family设置的是AF_INET,那么对应的是TCP和UDP。

protocol用于指定协议类型。这个参数是可选的。在建立tcp或者是udp连接的时候他们通常都是0。如果第一个参数是AF_INET,那么这个参数表示是ip包中的protocol字段。

【UDP本来就不区分server和client。所有节点都是对等的】

第二步是将socket绑定到指定的地址:

sock.bind(('localhost',7556))

第三步是使用listen方法监听请求:【listen方法中的参数指明可接受的最大连接数】
sock.listen(5)

第四步是不断接收请求:收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。
connection,address = sock.accept()

accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。
第五步是处理阶段,服务器和客户端通过send和recv方法通信(传输数据)。

如果send成功了,那么对方的缓冲区已经有你发送的数据了。
#调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。

connection.settimeout(5)
buf = connection.recv(1024)

具体处理如下:

if buf == '1':
  connection.send('welcome to python server!')
else:
  connection.send('please go out!')

使用send发送数据给客户端。客户端使用recv来接收数据。

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost',7556))
import time
time.sleep(2)
sock.send('1')
print sock.recv(1024)
sock.close()

这就是整个通信过程了。

全部代码如下:

server端:

#!/usr/bin/env python
import socket
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(('localhost',7556))
sock.listen(5)
while True:
  connection,address = sock.accept()
  print "client ip is "
  print address
  try:
    connection.settimeout(5)
    buf = connection.recv(1024)
    if buf == '1':
      connection.send('welcome to python server!')
    else:
      connection.send('please go out!')
  except socket.timeout:
    print 'time out'
  connection.close()

client端如下:

#!/usr/bin/env python
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost',7556))
import time
time.sleep(2)
sock.send('1')
print sock.recv(1024)
sock.close()

记住,socket使用完毕之后要关闭。【上面的代码,server端忘记关闭socket了】
当然,在socket连接的过程中,最好使用try except来做一下错误处理。

注意,accept函数和recv函数都是阻塞式的。也就是说,他们一直在等待,直到有客户端连接过来或者是后者的有数据可以接收。

下面是一个FTP的小例子。

使用了多线程来处理每一个请求。

示例代码点击此处本站下载。

如果传输路径不存在则建立。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python进阶教程之文本文件的读取和写入
Aug 29 Python
Python pickle模块用法实例
Apr 14 Python
Python用threading实现多线程详解
Feb 03 Python
python里使用正则表达式的组嵌套实例详解
Oct 24 Python
django2.0扩展用户字段示例
Feb 13 Python
Python使用type关键字创建类步骤详解
Jul 23 Python
python加载自定义词典实例
Dec 06 Python
Python+OpenCV实现将图像转换为二进制格式
Jan 09 Python
Python解释器及PyCharm工具安装过程
Feb 26 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
Feb 06 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 Python
Python简单删除目录下文件以及文件夹的方法
May 27 #Python
python解析xml文件实例分析
May 27 #Python
Python定时执行之Timer用法示例
May 27 #Python
python定时执行指定函数的方法
May 27 #Python
python统计文本字符串里单词出现频率的方法
May 26 #Python
python通过get,post方式发送http请求和接收http响应的方法
May 26 #Python
python使用urllib2提交http post请求的方法
May 26 #Python
You might like
PHP多个文件上传到服务器实例
2014/10/29 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
vue编写简单的购物车功能
2021/01/08 Vue.js
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
详解Python3中的Sequence type的使用
2015/08/01 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
Python WEB应用部署的实现方法
2019/01/02 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
python mock测试的示例
2020/10/19 Python
海淘母婴商城:国际妈咪
2016/07/23 全球购物
行政文员岗位职责
2013/11/08 职场文书
大学生思想汇报范文
2013/12/31 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
群众路线对照检查剖析材料
2014/10/09 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书