Sockte是计算机之间进行网络通信的一套程序接口,相当于在发送端和接收端之间建立一个通信管道。在实际应用中,一些远程管理软件和网络安全软件大多数依赖于Socket来实现特定功能,由于TCP方式在网络编程中应用非常频繁,此处将对TCP编程进行讲解
编写TCP时一般会用到Socket模块,其方法主要包括:
- connect(address):连接远程计算机
- send(bytes[,flags]):发送数据
- recv(bufsize[,flags]):接收数据
- bind(address):绑定地址
- listen(backlog):开始监听,等待客户端连接
- accept():响应客户端的一个请求,接收一个连接
使用TCP进行通信,首先需要在客户端和服务端建立连接,并且要在通信结束后关闭连接以释放资源。由于TCP是面向连接的,因此相对于UDP提供更高的可靠性。下面展示如何通过TCP进行通信
例如,设计一个对话系统“小艾”,该应用分为两部分,一部分为服务端,一部分为客户端。客户端发送请求,服务端返回应答消息,两部分代码如下:
服务器段
#! /usr/bin/python
#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("listening at port 6666")
conn,addr = s.accept()
print('Connect by:',addr)
while True:data = conn.recv(1024)data = data.decode()if not data:breakprint('Received message:',data)conn.sendall(language.get(data,'Nothing').encode())
conn.close()
s.close()
客户端程序
#coding:utf-8
import socket,sys
host = '127.0.0.1'
port = 6666s = 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() == '再见':breaks.close()
运行结果