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按行读取文件的简单实现方法
Jun 22 Python
分享一个简单的python读写文件脚本
Nov 25 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
python XlsxWriter模块创建aexcel表格的实例讲解
May 03 Python
Python切片索引用法示例
May 15 Python
Python用5行代码写一个自定义简单二维码
Oct 21 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
tensorflow如何继续训练之前保存的模型实例
Jan 21 Python
Python 实现黑客帝国中的字符雨的示例代码
Feb 20 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
Mar 06 Python
python实现图片转换成素描和漫画格式
Aug 19 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
IE和Firefox下event事件杂谈
2009/12/18 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
Bootstrap进度条实现代码解析
2017/03/07 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
js 开发之autocomplete="off"在chrom中失效的解决办法
2017/09/28 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
Python编程中time模块的一些关键用法解析
2016/01/19 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
django将数组传递给前台模板的方法
2019/08/06 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
如何开发安全的AJAX应用
2014/03/26 面试题
城市规划毕业生求职信
2013/10/10 职场文书
营业员个人总结的自我评价
2013/10/25 职场文书
优秀英语专业毕业生求职信
2013/11/23 职场文书
文秘人员工作职责
2014/01/31 职场文书
酒店节能减排方案
2014/05/26 职场文书
义和团口号
2014/06/17 职场文书
公务员培的训心得体会
2014/09/01 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
护士个人年终总结
2015/02/13 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书