上QQ阅读APP看书,第一时间看更新
2.8 Socket网络编程
Socket是计算机之间进行网络通信的一套程序接口,相当于在发送端和接收端之间建立了一个通信管道。在实际应用中,一些远程管理软件和网络安全软件大多依赖于Socket来实现特定功能,由于TCP(Transmission Control Protocol,传输控制协议)方式在网络编程中应用得非常频繁,此处将对TCP编程进行讲解并给出具体应用实例。
编写TCP时一般会用到的Socket模块,其方法主要包括:
·connect(address):连接远程计算机。
·send(bytes[,flags]):发送数据。
·recv(bufsize[,flags]):接收数据。
·bind(address):绑定地址。
·listen(backlog):开始监听,等待客户端连接。
·accept():响应客户端的一个请求,接受一个连接。
使用TCP进行通信,首先需要在客户端和服务端建立连接,并且要在通信结束后关闭连接以释放资源。由于TCP是面向连接的,因此相对于UDP提供更高的可靠性。下面通过示例展示如何通过TCP进行通信。
例如,设计一个对话系统“小艾”。该应用分为两部分,一部分为服务端,一部分为客户端。客户端发送请求信息,服务端返回应答信息。两部分的代码如下所示。
(1)服务端代码
代码如下:
# coding=UTF-8 import socket language = {'what is your name':'I am Tom','how old are you':'25','bye':'bye!'} HOST = "127.0.0.1" PORT = 6666 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind((HOST,PORT)) s.listen(1) print("Listing at port 6666") conn,addr = s.accept() print('Connect by: ',addr) while True: data = conn.recv(1024) data = data.decode() if not data: break print('Received message:',data) conn.sendall(language.get(data,'Nothing').encode()) conn.close() s.close()
(2)客户端代码
代码如下:
# coding=UTF-8 import socket,sys HOST = "127.0.0.1" PORT = 6666 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: s.connect((HOST,PORT)) except Exception as e: print('server not found!') sys.exit() while True: c = input('YOU SAY:') s.sendall(c.encode()) data = s.recv(1024) data = data.decode() print('Received:',data) if c.lower()=='再见': break
将以上的代码分别保存为server.py和client.py文件,在cmd窗口运行服务端程序,服务端开始进行监听;启动一个新的cmd窗口并运行客户端程序,服务端程序提示连接已建立;在客户端输入要发送的信息后,服务端会根据提前建立的字典进行自动回复。对话效果如图2-6所示。
图2-6 对话效果