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启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
Apr 09 Python
列举Python中吸引人的一些特性
Apr 09 Python
Python实现的科学计算器功能示例
Aug 04 Python
基于python元祖与字典与集合的粗浅认识
Aug 23 Python
python3实现多线程聊天室
Dec 12 Python
基于python的socket实现单机五子棋到双人对战
Mar 24 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
Python高级特性之闭包与装饰器实例详解
Nov 19 Python
Django集成celery发送异步邮件实例
Dec 17 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 Python
Python多线程thread及模块使用实例
Apr 28 Python
python 下载文件的几种方法汇总
Jan 06 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 在线导入mysql大数据程序
2015/06/11 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
PHP错误机制知识汇总
2016/03/24 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
克隆javascript对象的三个方法小结
2011/01/12 Javascript
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
JQuery验证工具类搜集整理
2013/01/16 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
2017/12/11 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
Python中使用HTMLParser解析html实例
2015/02/08 Python
启动targetcli时遇到错误解决办法
2017/10/26 Python
django ajax json的实例代码
2018/05/29 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
保安的辞职报告怎么写
2014/01/20 职场文书
社区务虚会发言材料
2014/10/20 职场文书
python - timeit 时间模块
2021/04/06 Python
python 如何用map()函数创建多线程任务
2021/04/07 Python
解决numpy和torch数据类型转化的问题
2021/05/23 Python