《网络编程基础》第一章1.5.1.1基本客户端操作
Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。允许用户使用层叠结构的菜单与文件,以发现和检索信息,它拥有世界上最大、最神奇的编目。Gopher客户程序和Gopher服务器相连接,并能使用菜单结构显示其它的菜单、文档或文件,并索引。同时可通过Telnet远程访问其它应用程序。Gopher协议使得Internet上的所有Gopher客户程序,能够与Internet上的所有已"注册"的Gopher服务器进行对话。
该程序需要两个命令行参数,主机名和文件名,实现从主机上请求相关文档的功能。
代码:
#!/usr/bin/env python //见最下面的注
# Simple Gopher Client - Chapter 1 - gopherclient.py
import socket,sys
port=70
host=sys.argv[1]
filename=sys.argv[2]
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
s.sendall(filename+"\r\n")
while 1:
buf=s.recv(2048)
if not len(buf):
break
sys.stdout.write(buf)
sys.argv是一个包含命令行参数的列表,sys.argv[0]表示程序本身文件路径,从sys.argv[1]开始表示在命令行中输入的参数。
socket.socket()建立一个Socket,AF_INET指定使用IPv4协议,IPv6为AF_INET6。SOCK_STREAM指定使用面向流的TCP协议,这样,一个Socket对象就创建成功,但是还没有建立连接。接着,程序连接远程主机并提供文件名,获得响应后,在屏幕上打印。
运行程序时需要使用命令行,我是在win10上运行的,所以用的powershell,开始需要先配置python的环境在powershell中输入:[Environment]::SetEnvironmentVariable(“Path”,”$env:Path;F:\Python26″, “User”)(我用的python2.6存在了F盘),将程序保存为gopherclient.py,在命令行输入python ./gopherclient.py quux.org /就可以得到以下输出:
注:
在unix类的操作系统才有意义。
#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器。
#!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先
会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。