Python 的 Socket 编程

 更新时间:2015年03月24日 16:14:47   投稿:hebedich  
这篇文章最初发布的时候标题是“Python的WebSocket编程”,坦白来说有点文不对题。我们在这里打算讨论的仅仅是常规的socket编程。尽管 Web Socket 和常规sockets有点很相似,但又不是同一个东西。那我还是希望这篇文章对你们有点帮助。

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的接口测试框架实例

    下面小编就为大家带来一篇基于Python的接口测试框架实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Python的gevent框架的入门教程

    Python的gevent框架的入门教程

    这篇文章主要介绍了Python的gevent框架的入门教程,示例代码基于Python2.x版本,需要的朋友可以参考下
    2015-04-04
  • Python Xml文件添加字节属性的方法

    Python Xml文件添加字节属性的方法

    下面小编就为大家分享一篇Python Xml文件添加字节属性的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • 关于pip安装opencv-python遇到的问题

    关于pip安装opencv-python遇到的问题

    这篇文章主要介绍了关于pip安装opencv-python遇到的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • python库h5py入门详解

    python库h5py入门详解

    本文只是简单的对h5py库的基本创建文件,数据集和读取数据的方式进行介绍,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 使用Python Tkinter实现剪刀石头布小游戏功能

    使用Python Tkinter实现剪刀石头布小游戏功能

    这篇文章主要介绍了使用Python Tkinter实现剪刀石头布小游戏功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • PyCharm利用pydevd-pycharm实现Python远程调试的详细过程

    PyCharm利用pydevd-pycharm实现Python远程调试的详细过程

    这篇文章主要介绍了PyCharm利用pydevd-pycharm实现Python远程调试,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 跟老齐学Python之眼花缭乱的运算符

    跟老齐学Python之眼花缭乱的运算符

    在python里,可能大家已从运算表里找到了,即 (“+”),但是与PHP不同的是两个对象相加,两个对象必须是同类型的,不同类型的两个对象是不能相加的.要实现像上面PHP代码里的运算,必须保证两对象类型一致。
    2014-09-09
  • Python数据类型转换实现方法

    Python数据类型转换实现方法

    这篇文章主要介绍了Python数据类型转换的实现,有时候,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下你只需要将数据类型作为函数名即可
    2022-12-12
  • Jupyter notebook运行Spark+Scala教程

    Jupyter notebook运行Spark+Scala教程

    这篇文章主要介绍了Jupyter notebook运行Spark+Scala教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论