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系列之新版本导入httplib模块报ImportError解决方案
May 23 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
python+pyqt5实现KFC点餐收银系统
Jan 24 Python
Python中调用其他程序的方式详解
Aug 06 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
Selenium常见异常解析及解决方案示范
Apr 10 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
Django Form设置文本框为readonly操作
Jul 03 Python
python 求两个向量的顺时针夹角操作
Mar 04 Python
PyQt5 显示超清高分辨率图片的方法
Apr 11 Python
python开发的自动化运维工具ansible详解
Aug 07 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实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
python3编写C/S网络程序实例教程
2014/08/25 Python
python 内置函数filter
2017/06/01 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
django 中的聚合函数,分组函数,F 查询,Q查询
2019/07/25 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
应届大专毕业生个人自荐信
2013/09/22 职场文书
移风易俗倡议书
2014/04/15 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
员工教育培训协议书
2014/09/27 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
保姆聘用合同
2015/09/21 职场文书