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制作花瓣网美女图片爬虫
Oct 28 Python
django js实现部分页面刷新的示例代码
May 28 Python
使用TensorFlow实现SVM
Sep 06 Python
Python DataFrame.groupby()聚合函数,分组级运算
Sep 18 Python
python将一个英文语句以单词为单位逆序排放的方法
Dec 20 Python
Python 调用PIL库失败的解决方法
Jan 08 Python
Python matplotlib学习笔记之坐标轴范围
Jun 28 Python
详解python statistics模块及函数用法
Oct 27 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
Python利器openpyxl之操作excel表格
Apr 17 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+jQuery实现自动补全功能源码
2013/05/15 PHP
更改localhost为其他名字的方法
2014/02/10 PHP
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
Jquery解析json字符串及json数组的方法
2015/05/29 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
2017/03/04 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
python提取内容关键词的方法
2015/03/16 Python
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
自学python的建议和周期预算
2019/01/30 Python
Python matplotlib实时画图案例
2020/04/23 Python
举例讲解Python装饰器
2020/12/24 Python
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
四年级学生评语大全
2014/04/21 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS