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 相关文章推荐
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
Python性能提升之延迟初始化
Dec 04 Python
python去除字符串中的换行符
Oct 11 Python
python3.7 sys模块的具体使用
Jul 22 Python
Python生成器generator原理及用法解析
Jul 20 Python
通过代码简单了解django model序列化作用
Nov 12 Python
浅谈Selenium 控制浏览器的常用方法
Dec 04 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 Python
Python语言规范之Pylint的详细用法
Jun 24 Python
python 学习GCN图卷积神经网络
May 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的ajax简单实例
2014/02/27 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
复制本贴标题和地址的js代码
2008/07/01 Javascript
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
JS实现多功能计算器
2020/10/28 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
python分布式环境下的限流器的示例
2017/10/26 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
python批量生成条形码的示例
2020/10/10 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
自我鉴定书
2014/03/24 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
python 模块重载的五种方法
2021/04/24 Python
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python