自动化测试

当前位置:首页 > 自动化测试

《Python 核心编程 》(第二版)第一部分 Python 核心 第十六章 续

16.3.5运行我们的客 户端与TCP服务器

现在,我们来运行服务器和客户端程序,看看它们的运行情况如何。我们应该先运行服务器还是客户呢?很显然,如果我们先运行客户端,由于没有服务器在等待请求,客户端没办法做连接。服务器是一个被动端,它先创建自己然后被动地等待连接。而客户端则是主动端,由它主动地建立-一个连接。所以:

要先开服务器,后开客户端。.

我们在运行客户端和服务器的例子中,使用了同一台电脑。其实也可以把服务器放在其他的电脑上,这时只要改改主机名就好了。(看到自己写的第一个网络程序运行在不同的电脑上,那是多么激动人心的事啊)。

下面就是客户端的输入与输出,不输入数据直接按回车键就可以退出程序:

$ tarclnt. py

> hi

[Sat Jun 17 17:27:21 2006] hi

》spanish inquisition .

[Sat Jun 17 17:27:37 2006] spaniah inquisition

TopSage com

>

$

服务器的输出主要用于调试目的:

$ tsTserv.py

waiting for connection. . .

... connected from: ('127.0.0.1', 1040)

waiting for connection. ..

当有客户端连接上来的时候,会显示一个“.. connected from....信息。在客户端接受服务的时候,服务器又回去等待其他客户端连接。在从服务器退出的时候,我们要跳出那个无限循环,这时会触发一个异常。避免这种错误的方法是采用一-种更优雅的退出方式。

《Python 核心编程 》(第二版)第一部分 Python 核心 第十六章 续

这个简单的网络应用程序的有趣之处并不仅仅在于我们演示了数据怎样从客户端传到服务器,然后又传回给客户端,而且我们还把这个服务器当成了“时间服务器”,因为,字符串中的时间戳完全是来自于服务器的。

16.3.6创建- 个UDP服务器

由于UDP服务器不是面向连接的,所以不用像TCP服务器那样做那么多设置工作。事实上,并不用设置什么东西,直接等待进来的连接就好了.

9s - socket()                                  #创建一个服务器套接字

ss.bind()                                       #绑定服务器套接字

inf_ 1oop:                                     #服务器无限循环

cs - ss.recvfrom () /ss.sendto( )    # 对话(接收与发送)

ss.close( )                                      #关闭服务器套接字

从伪代码中可以看出,使用的还是那套先创建套接字然后绑定到本地地址(主机端口对)的方法。无限循环中包含了从客户端接收消息,返回加了时间戳的结果和回去等下一个消息这三步。同样的,由于代码不会跳出无限循环,所以,close(函数调用是可选的。我们写这一句话的 原因是要提醒读者,在设计-个更智能的退出方案的时候,要确保close0函數会被调用。

例16.3 UDP 时间戳服务器(tsUserv.py)

创建一一个能接收客户端消息、在消息前加一个时间戳后返回的UDP服务器。

1  #!/us:/bin/env python


相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~