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开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
Python查找相似单词的方法
Mar 05 Python
用Python编写一个简单的FUSE文件系统的教程
Apr 02 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
详解python 3.6 安装json 模块(simplejson)
Apr 02 Python
python 模拟创建seafile 目录操作示例
Sep 26 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
python tkinter之 复选、文本、下拉的实现
Mar 04 Python
python实现UDP协议下的文件传输
Mar 20 Python
Python selenium模拟手动操作实现无人值守刷积分功能
May 13 Python
使用openCV去除文字中乱入的线条实例
Jun 02 Python
selenium+超级鹰实现模拟登录12306
Jan 24 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
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
range 标准化之获取
2011/08/28 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
JS实现动态生成表格并提交表格数据向后端
2020/11/25 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
python 定时修改数据库的示例代码
2018/04/08 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
wxPython实现画图板
2020/08/27 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
Keras 使用 Lambda层详解
2020/06/10 Python
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
环境整治工作方案
2014/05/18 职场文书
温馨提示标语
2014/06/26 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
租车协议书
2015/01/27 职场文书
长城导游词300字
2015/01/30 职场文书
工商局个人工作总结
2015/03/03 职场文书
千与千寻观后感
2015/06/04 职场文书
创业计划书详解
2019/07/19 职场文书