Socket 是计算机之间进行网络通信的一套程序接口,相当于在发送端和接收端之间建立了一个通信管道。在实际应用中,一些远程管理软件和网络安全软件大多依赖于 Socket 来实现特定功能,由于 TCP(Transmission
Control
Protocol,传输控制协议)方式在网络编程中应用得非常频繁,此处将对 TCP 编程进行讲解并给出具体应用实例
编写 TCP 时一般会用到的 Socket 模块,其方法主要包括:

1
2
3
4
5
6
connect(address):连接远程计算机
send(bytes[,flags]):发送数据
recv(bufsize[,flags]):接收数据
bind(address):绑定地址
listen(backlog):开始监听,等待客户端连接
accept():响应客户端的一个请求,接受一个连接

使用 TCP 进行通信,首先需要的是在客户端和服务端之间建立连接,并且要在通信结束后关闭连接以释放资源。由于 TCP 是面向连接的,因此相对于 UDP 来说能提供更高的可靠性。
用示例展示如何通过 TCP 进行通信:

设计一个对话系统 "小艾"。该应用分为两部分,一部分为服务端,另一部分为客户端。客户端发送请求信息,服务端返回应答信息。

1. 服务端代码(server.py):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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. 客户端代码(client.py):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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:
sys.exit()
while True:
c = input("YOU SAY:")
s.sendall(c.encode())
data = s.recv(1024)
data = data.decode()
print('Recived:', data)
if c.lower() == '再见':
break
s.close()

将以上代码分别命名为 server.py 和 client.py,在 cmd 窗口运行服务端程序,服务端开始进行监听;启动一个新的 cmd 窗口并运行客户端程序,服务端程序提示连接已建立;在客户端输入要发送的信息,服务端会根据提前建立的字典自动进行回复
效果图:

在运行客户端代码后,服务端会显示已连接 ip 和端口,并且会显示出接收的语句,当输入 "再见" 时,服务端和客户端会同时断开,是因为 client.py 中 while 循环中的 if 语句,当输入再见时会执行 break 语句跳出循环,并执行 s.close () 关闭程序,从而与服务端断开连接,服务端也就断开了