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下singleton模式的实现方法
Jul 16 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
Nov 06 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
使用python爬取B站千万级数据
Jun 08 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
Nov 15 Python
Pytorch之卷积层的使用详解
Dec 31 Python
Python中使用filter过滤列表的一个小技巧分享
May 02 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
Jul 09 Python
使用Python pip怎么升级pip
Aug 11 Python
python实现高效的遗传算法
Apr 07 Python
关于Python中*args和**kwargs的深入理解
Aug 07 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
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
ie focus bug 解决方法
2009/09/03 Javascript
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
判断用户是否在线的代码
2011/03/05 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
python读取与写入csv格式文件的示例代码
2017/12/16 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
英国电气世界:Electrical World
2019/09/08 全球购物
副总经理工作职责
2013/11/28 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
新闻人物通讯稿
2014/10/09 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
母亲去世追悼词
2015/06/23 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电
Vue操作Storage本地化存储
2022/04/29 Vue.js