socket模块可以轻松实现tcp通信编程。
1.TCP编程
Socket表示“打开了一个网络链接或者一个服务”,由IP+port组成,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。
服务器和客户端tcp通信过程如下:
服务器:创建套接字->绑定服务器地址->监听连接->接受连接->数据接收/发送 客户端:创建套接字->连接服务器地址->数据接收/发送
2.实例
实现客户端与服务器聊天的TCP编程。
服务器
# -*- coding: utf-8 -*-
# @Time : 2022/5/8 8:52
# @File : tcp_server.py
# @Software : PyCharm
# 导入socket模块
import socket
from time import ctime
# 主机IP
host = '127.0.0.1'
# 端口
port = 8888
BUFSIZE = 4096
# 创建TCP/IP套接字
server = socket.socket()
# 绑定端口
server.bind((host, port))
# 设置最多连接数
server.listen(5)
print("服务器等待客户端连接...")
# 创建一个死循环
while True:
client, addr = server.accept() # 建立客户端连接
print(addr)
while 1:
data = client.recv(BUFSIZE)
print(data.decode())
#如果客户端回复了bye则退出
if data.startswith('bye'.encode()):
break
# 提示用户输入数据
send_data = input('[Server]请输入要发送的数据:')
buf = '[' + ctime() + ']' + send_data
client.send(buf.encode())
if send_data == 'bye':
break
client.close()
# 关闭服务器连接
server.close()
客户端
# -*- coding: utf-8 -*-
# @Time : 2022/5/8 8:53
# @File : tcp_client.py
# @Software : PyCharm
# 导入socket模块
import socket
# 创建套接字
s = socket.socket()
# IP
host = '127.0.0.1'
# 端口
port = 8888
BUFSIZE = 4096
# 主动初始化TCP服务器连接
s.connect((host, port))
while True:
# 提示用户输入数据
send_data = input('[Client]请输入要发送的数据:')
# 发送TCP数据
s.send(send_data.encode())
if send_data == 'bye':
break
# 接受对方发送过来的数据,最大接受4096字节
recvData = s.recv(BUFSIZE)
print('接收到的数据为:', recvData.decode())
if recvData.endswith('bye'.encode()) :
break
# 关闭套接字
s.close()
先启动服务器再启动客户端,首先客户端输入聊天内容。
运行结果:
