概述:网络编程也叫网络通信,Socket通信,即:通信双方都独有自己的Socket对象,数据在Socket之间通过数据报包(UDP)或者字节流(TCP)的形式进行传输
端口号,IP,协议
IP 寻找唯一电脑,设备在网络中的唯一标识
端口号 寻找唯一程序,程序在设备中的唯一标识
协议 双方都要遵守的规则
面向连接
TCP:电话联系,面向有连接,必须先建立好才可以进行数据传输
UDP:群聊,面向无连接,只管发送不管对方是否接收(数据包 发送)
四条流
主机A---------------------------->主机B 主机A为输出流,主机B为输入流
主机A<----------------------------主机B 主机B为输出流,主机A为输入流
建立连接需要先三次握手
1,客户端向服务器端发送请求,等待服务端确认
2,服务器端接收客户端请求,回复客户端确认连接请求
3,客户端收到确认,再次发送请求确认服务端,如果服务端受到正确请求则正式建立连接
断开连接是四次挥手
1,主机A提出断开连接请求
2,主机B做出相应,该方向上的TCP连接将会关闭
3,主机B提出反向断开连接请求
4,主机A做出相应,该方向上的TCP连接将会关闭
TCP特点:
面向有连接
采用字节流传输数据,理论无大小限制
安全可靠
效率相对较低
区分客户端和服务器端
Socket套接字
尝试将 Socket 代表客户端和服务器端的设备
# 创建Socket对象
import socket
socket_obj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#参数一,表示地址族,使用IPV4还是IPV6,默认为IPV4,AF_INET6代表IPV6
#参数二,表Socket类型,TCP还是UDP,SOCK_STREAM(TCP),SOCK_DGRAM(UDP)
print(socket_obj)TCP服务器端操作步骤流程:
1,创建服务端套接字对象
2,绑定端口号,bind()
3,设置监听,listen() (设置连接最大设备数)
4,等待接受客户端的连接请求,accept()
5,发送数据 send()
6,接收数据 recv(n) n表以多大字节接收数据
7,关闭套接字
"""
服务器端给客户端发送消息
客户端给出回执消息
通过字节流实现
"""
import socket
# 创建服务器端socket对象,ipv4,tcp
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1',65432))
server_socket.listen(5)
accept_socket, client_info = server_socket.accept()
# 只针对有数字,字母,符号有效
accept_socket.send(b'Hello')
accept_socket.recv(1024).decode('utf-8')
accept_socket.close()
server_socket.close()
#关键字
#编码encode
#解码decode客户端
1,创建客户端套接字对象
2,连接服务器端,指定:服务器端IP,端口号
3,接受服务器端的信息并打印
4,给服务器端发送信息
5,释放资源
import socket
client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1',65432))
data=client_socket.recv(1024).decode('utf-8')
print(f"客户端收到来自服务端的信息:{data}")
client_socket.send('你好'.encode('utf-8'))
client_socket.close()编码解码:
encode()
decode()