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中使用tarfile压缩、解压tar归档文件示例
Apr 05 Python
Scrapy使用的基本流程与实例讲解
Oct 21 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
Jul 23 Python
python计算二维矩形IOU实例
Jan 18 Python
python 遗传算法求函数极值的实现代码
Feb 11 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
python在一个范围内取随机数的简单实例
Aug 16 Python
selenium3.0+python之环境搭建的方法步骤
Feb 01 Python
python实现简单的名片管理系统
Apr 26 Python
教你如何使用Python下载B站视频的详细教程
Apr 29 Python
Python Pandas解析读写 CSV 文件
Apr 11 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中“简单工厂模式”实例代码讲解
2012/09/04 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
javascript instanceof 内部机制探析
2010/10/15 Javascript
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
python计算auc的方法
2020/09/09 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
Woolworth官网:澳洲第一大超市
2017/06/25 全球购物
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
linux面试题参考答案(6)
2014/08/29 面试题
班主任工作年限证明
2014/01/12 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
财务会计实训报告
2014/11/05 职场文书
2014年调度员工作总结
2014/11/19 职场文书
运动会开幕式致辞
2015/07/29 职场文书
600字作文之感受大自然
2019/11/27 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python