TCP/IP 是标准的协议,它可以使用世界范围内的计算机通过Internet或本地的网络通信
1.编写一个TCP客户端程序
1 #!/usr/bin/env python 2 3 import socket, sys 4 5 port = 70 6 host = sys.argv[1] 7 filename = sys.argv[2] 8 9 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 10 s.connect((host, port)) 11 12 s.sendall(filename+ "\r\n") 13 14 while 1: 15 buf = s.recv(2048) 16 if not len(buf): 17 break; 18 sys.stdout.write(buf)
这段代码实现的是Gopher协议,一种Web出现之前在Internet上非常流行的协议。这个程序需要两个命令行参数:主机名和文件名,实现从主机上请求相关文档的功能。
操作很简单,通过调用socket.socket()来建立一个socket,里面的参数告诉系统需要一个Internet socket来进行TCP通信,接着程序连接远程主机并提供文件名。最后获得响应,并把内容打印出来。
运行以下命令:python f:\python\gopherclient.py quux.org /,您将得到Gopher服务器根目录文件列表
2.编写一个服务器端程序
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 import socket 5 6 host= '' #主机名设置成空字符串,代表这个服务器可以接受来自任意地方的连接 7 port = 51423 8 9 s= socket.socket(socket.AF_INET, socket.SOCK_STREAM) 10 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #把socket设置成可复用的(可选) 11 s.bind((host, port)) #绑定主机和端口号 12 s.listen(1) #设置一次最多只监听一个连接 13 14 print "Server is running on port %d" % port 15 16 while 1: 17 clientsock, clientaddr = s.accept() #当客户端连接时,accept会返回两个信息一个客户端socket和客户端ip,端口号 18 """ 19 这里使用了一个文件类对象,从客户端读取一个字符串,显示一个应答,最后关闭文件类对象和客户端socket 20 """ 21 clientfile = clientsock.makefile('rw', 0) 22 clientfile.write("Welcome," +str(clientaddr)+"\n") 23 clientfile.write("Please enter a string:") 24 line = clientfile.readline().strip() 25 clientfile.write("You entered %d characters.\n" % len(line)) 26 clientfile.close() 27 clientsock.close() 28
首先运行服务端,然后在cmd中输入telnet localhost 51423连接服务端,会得到以下结果:
你也许会发现我没有编写telnet协议,但是telnet客户端也能通信。