python网络编程【一】

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客户端也能通信。

 

posted @ 2016-06-29 16:05  木落之年  阅读(264)  评论(0编辑  收藏  举报