TCP协议使服务器和客户端通过socket进行通信
服务器端通信流程如下:
1.使用socket类创建一个套接字对象
2.使用bind(ip,port)方法绑定IP地址和端口号
3.使用listen()方法开始TCP监听
4.使用accept0方法等待客户端的连接
5.使用recv0/send0方法接收/发送数据
6.使用close0关闭套接字
以下是代码:
from socket import socket, AF_INET, SOCK_STREAM# AF_INET 用于Internet之间的进程通信
# SOCK_STREAM 表示的是用TCP协议编程# (1)创建socket对象
server_socket = socket(AF_INET, SOCK_STREAM)# (2)绑定IP地址和端口号
ip = '127.0.0.1'
port = 8888
server_socket.bind((ip, port))# (3)开始监听
server_socket.listen(5)
print("服务已启动")# (4)等待客户端连接
client_socket, client_addr = server_socket.accept()# (5)接收来自客户端的数据
data = client_socket.recv(1024)
print('客户端发送的数据是:', data.decode('utf-8')) # decode解码# (6)关闭连接
client_socket.close()
客户端通信方式如下:
1.使用socket类创建一个套接字对象
2.使用connect(host,port)设置连接的主机lP和主机设置的端口号
3.使用recv()/send()方法接收/发送数据
4.使用close()关闭套接字
以下是代码
import socket
from encodings.utf_8 import encode# (1)创建客户端socket对象
client_socket = socket.socket()# (2)向目标服务器发送请求
client_socket.connect(('127.0.0.1', 8888))# (3)发送数据
client_socket.send('welcome back '.encode('utf-8'))# (4)关闭连接
client_socket.close()print('发送完毕')
当然也可以实现多次通信
服务器端
import socket# 模块名.类名
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.bind(('127.0.0.1', 8888))server.listen(5)
print("服务器已启动")client_socket, client_add = server.accept()# 接收来自客户端的数据
info = client_socket.recv(1024).decode('utf-8') # while循环的4步骤 info初始化
while info != 'bye': # 条件判断if info != '':print("收到数据:", info)data = input("发送数据:")client_socket.send(data.encode('utf-8'))if data == 'bye':break # 循环info = client_socket.recv(1024).decode('utf-8') # 改变变量,避免死循环# 关闭socket对象
server.close()
client_socket.close()
客户端
import socketcli = socket.socket()
cli.connect(('127.0.0.1', 8888))
print('建立连接')info = ''
while info != 'bye':send_data = input("客户端要发送:")cli.send(send_data.encode('utf-8'))if send_data == 'bye':breakinfo = cli.recv(1024).decode('utf-8')print("收到服务器的数据:", info)cli.close()