Socket的使用
我们进入到网络编程方面的学习。
当然之后的几章会对网络编程做简要的说明与演示。因为涉及到网络,所以环境也有些要求,比如web服务。2台虚拟机的交互。虽然很多东西本机也可以实现,毕竟2台机器的交互看的更直观些。
import socket
1、简单的用socket与http服务器交互
开始第一个函数 socket 的学习,我们连接服务器的 http 服务得到其响应。
如果在执行 connect() 过程中出现了如下报错,则需要清除本地和对端防火墙里的条目,或者增加允许。
首先我们在代码里创建了一个 socket 对象。并且通过 connect() 函数输入IP和端口号进行连接。接下来我们使用 send() 函数向服务器端发送一个请求。然后使用 recv(150) 接收服务器端发回的前150个字节。最后 close() 关闭连接。
2、用 socket 进行 TCP 端口检查
我们继续看另一个有点实际作用的代码,这个代码可以检查远端 http 服务的状态。我们尽量使其可以作为一个命令般在工作中使用,因此引用了 OptionParser() 函数来进行命令行参数的编写。
来看代码。
我们定义了一个 check_server() 的函数,作为判断的主体。这个函数我们使用了 try...except... 结构,将错误(socket.error) 收集到 变量 e 里面。其他的没什么可说的。之后在程序主体里我们调用了parser来进行标准命令行参数的编写。有点Linux基础的朋友很容易看懂。
使用 (options, args) = parser.parse_args() 来解析程序的命令行。
最后执行输出,结果如下。
如果要返回服务器状态,也可以直接 send() 用获得的返回值判定服务器状态。不赘述了。
3、用 socket 进行网络通信
我们不能仅局限与和 http 服务器交互,可以尝试编写服务器端的程序。进行2台机器之间消息的传递。
服务端:
我们使用 bind()来将 socket 绑定到指定的地址。listen() 决定了最多有几个客户可以连接到服务器端。之后进行一个 while 的无限循环。而在 s.accept() 中,我们返回两个对象,一个是新的 socket对象,这里我们命名为 connection 。而另一个是一个含有2个元素的元组,分别是 IP地址和端口号,我们把他写入 addr 并在后面输出。 settimeout(50) 表示在50秒没有任何数据就触发timeout异常。后面会用 except 处理 timeout 异常。其他的没什么看都。都能看懂吧。
客户端在 Python 中执行
服务端显示
这个例子可以扩展,比如即时聊天软件。或者一个持续的消息传递。