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 01 Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
简单谈谈python基本数据类型
Sep 26 Python
python调用百度地图WEB服务API获取地点对应坐标值
Jan 16 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
May 07 Python
通过实例学习Python Excel操作
Jan 06 Python
Django media static外部访问Django中的图片设置教程
Apr 07 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 Python
Python3基于plotly模块保存图片表格
Aug 03 Python
python实现图像随机裁剪的示例代码
Dec 10 Python
Python操作Excel的学习笔记
Feb 18 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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
php zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
php提取字符串中网站url地址的方法
2014/12/03 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
JS 用6N±1法求素数 实例教程
2009/10/20 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
微信小程序签到功能
2018/10/31 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
pandas的qcut()方法详解
2019/07/06 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
毕业生就业推荐信范文
2013/12/01 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
内勤岗位职责范本
2015/04/13 职场文书
毕业论文致谢词
2015/05/14 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书