概述:网络编程也叫网络通信,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()