Python 的 Socket 编程


Posted in Python onMarch 24, 2015

Socket是网络应用的基础。而Python使得网络socket编程入门变得超级简单。在这篇简介里面我们将创建一个简单服务器,用于接受和相应客户端程序的请求。
由于本人最近对 Linux Containers 有点痴迷,因此我们也将在服务器中实现2个容器。同时在容器中我们在几秒钟内就能创建其他一些主机,这就能非常简单的模拟出一个网络。

创建容器

我使用的是Ubuntu14.04. 然后用root用户运行下面的命令就可以创建好2个容器了。

lxc-create -t download -n pyServer 

# Choose ubuntu, trusty, amd64 when prompted 

# Then clone the first container 

lxc-clone -o pyServer -n pyClient

启动服务器

现在我们创建好了容器,先进入到服务器容器中并启动我们的服务器程序。用root权限运行下面这条命令就可以启动容器了:lxc-start -n pyServer -d, 这将启动容器作为我们的守护进程。让我们先重新连接进入这个容器。这里我喜欢使用screen,这样我可以很方便的进出到容器中。先创建screen会话:  screen -dRR pyServer,需要重新连接到容器中的话,可以用命令:lxc-attach -n pyServer
当我们进入到容器中后,我们需要安装python并启动服务器。

apt-get install python 

vim pyServer.py

打开vim(或你个人偏好的文本编辑器),敲入以下python代码。

from socket import *

serverPort = 12000

serverSocket = socket(AF_INET, SOCK_DGRAM)

serverSocket.bind(('', serverPort))

print "The server is ready to rock and roll!"

while 1:

    name, clientAddress = serverSocket.recvfrom(2048)

    response = "Hello " + str(name) + "! You are really good at socket programming" 

    serverSocket.sendto(response, clientAddress)

这段代码很直观。我们创建了一个serverSocket监听12000端口。当接收到请求的时候(包含用户名)就会回复一条信息。启动服务器的命令是 python pyServer.py 如果一切正常的话,你应该可以看到这样一条信息 This server is ready to rock and roll! 用Ctrl+a 和Ctrl+d退出容器(还有screen会话)

启动客户端

现在服务器端已经准备就绪,改让客户端跑起来了。在开始前先查一下服务器容器的IP地址,我们马上就会用到。你可以用这个命令得到IP:lxc-ls --fancy 。用一个screen会话进入到客户端的容器,和前面步骤一样安装好python。

lxc-start -n pyClient -d

screen -dRR pyClient

lxc-attach -n pyClient

apt-get install python

vim pyClient.py

在vim里面敲入以下代码创建一个pyClient.py文件。

from socket import *

# Replace the IP address in serverName with the IP of your container that you      grabbed previously.

serverName = '10.0.3.211'

serverPort = 12000

clientSocket = socket(AF_INET, SOCK_DGRAM)

name = raw_input('Please enter your name:')

clientSocket.sendto(name, (serverName, serverPort))

response, serverAddress = clientSocket.recvfrom(2048)

print response

clientSocket.close()

这段代码也很直观。要求用户输入用户名,然后发送到服务器,最后打印出服务器响应信息。
现在你可以自己来了!保存文件,然后执行python程序 python pyClient.py .在你输入你的名字并按下回车后,就应该可以收到一条来自服务器的响应信息。
这是一个非常简单的例子,但我们很容易就发现,可以在这些基础的代码上面做一些拓展就可以实现很多更有趣也更复杂的应用。我们还可以利用LXC强大的功能但简便的操作模拟出一个更大的网络从而实现一个分布式应用。

以上所述就是本文的全部内容了,希望对大家学习python能够有所帮助。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

Python 相关文章推荐
不可错过的十本Python好书
Jul 06 Python
启动targetcli时遇到错误解决办法
Oct 26 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
Python DataFrame 设置输出不显示index(索引)值的方法
Jun 07 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
python自动化测试之异常及日志操作实例分析
Nov 09 Python
Python高级特性之闭包与装饰器实例详解
Nov 19 Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 Python
Python读写csv文件流程及异常解决
Oct 20 Python
python神经网络编程之手写数字识别
May 08 Python
Python实现单例模式的5种方法
Jun 15 Python
Python实现滑雪小游戏
Sep 25 Python
python获取标准北京时间的方法
Mar 24 #Python
python实现定时同步本机与北京时间的方法
Mar 24 #Python
Python随机生成一个6位的验证码代码分享
Mar 24 #Python
python判断字符串是否包含子字符串的方法
Mar 24 #Python
python使用datetime模块计算各种时间间隔的方法
Mar 24 #Python
python实现通过pil模块对图片格式进行转换的方法
Mar 24 #Python
python读取json文件并将数据插入到mongodb的方法
Mar 23 #Python
You might like
隐藏你的.php文件的实现方法
2007/03/19 PHP
php 静态页面中显示动态内容
2009/08/14 PHP
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
php实现httpRequest的方法
2015/03/13 PHP
PHP 错误处理机制
2015/07/06 PHP
JQuery index()方法使用代码
2010/06/02 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
JavaScript导出Excel实例详解
2014/11/25 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
javaScript基础详解
2017/01/19 Javascript
详解vue axios二次封装
2018/07/22 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
Python实现分数序列求和
2020/02/25 Python
python实现TCP文件传输
2020/03/20 Python
python集合的新增元素方法整理
2020/12/07 Python
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
师范生自我鉴定范文
2013/10/05 职场文书
后勤副校长自我鉴定
2013/10/13 职场文书
高中物理教学反思
2014/02/08 职场文书
经典禁毒标语
2014/06/16 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
刑事案件上诉状
2015/05/23 职场文书