计算机网络是把各个计算机连接到一起,让网络中的计算机可以相互通信;而网络编程就是如何在程序中实现两台计算机之间的通信。例如:当你用浏览器访问博客园时,你的计算机就和博客园上的某台服务器连接起来了;然后,博客园的某台服务器将网页上的内容作为数据通过互联网传输到你的电脑上。然而,由于你的电脑上可能不仅只有浏览器,还有QQ、迅雷、网易邮件客户端等,不同的程序连接的计算机也会不同,所以,更准确的说,网络通信是两台计算机上的俩个进程之间的通信。比如浏览器进程是和博客园服务器上的某个Web服务进程在通信,而QQ进程和腾讯的某个服务器上的某个进程在通信。
网络编程对所有的开发语言都一样,Python也不例外。用Python进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信。下面我们用socket模块来进行实例讲解。
Socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间进行通讯。在Python中,我们使用socket模块的socket函数创建一个socket对象,通过调用bind(hostname, port)函数来指定服务的port(端口);接着,我们调用socket对象的accept方法;该方法等待客户端的连接,并返回connection对象,表示已连接到客户端。
服务端源程序代码如下所示:
1 #!/usr/bin/python
2 # coding: UTF-8
3
4 import socket # 导入 socket 模块
5
6 s = socket.socket() # 创建 socket 对象
7 host = socket.gethostname() # 获取本地主机名
8 port = 12345 # 设置端口
9 s.bind((host, port)) # 绑定端口
10
11 s.listen(5) # 等待客户端连接
12 while True:
13 c, addr = s.accept() # 建立客户端连接。
14 print '连接地址:', addr
15 c.send('Welcome to visit the blog of elijah7i !')
16 c.close() # 关闭连接
接下来我们写一个简单的客户端实例连接到以上创建的服务,端口号为:12345;socket.connection(hostname, port)方法打开一个TCP连接到主机为hostname端口为port的服务商,记住,操作完成后需要关闭连接。
客户端源程序代码如下所示:
1 #!/usr/bin/python
2 # coding: UTF-8
3
4 import socket # 导入 socket 模块
5
6 s = socket.socket() # 创建 socket 对象
7 host = socket.gethostname() # 获取本地主机名
8 port = 12345 # 设置端口好
9
10 s.connect((host, port))
11 print s.recv(1024)
12 s.close()
现在我们用编译器执行第一个服务端源程序文件,可知:并没有什么结果显示。
接着我们用编译器执行第二个客户端源程序文件,显示结果如下所示:
Welcome to visit the blog of elijah7i !
我们再回头看第一个服务端源程序文件的结果,显示结果如下所示:
连接地址: ('192.168.1.147', 53525)