什么叫网络编程
- 使用Python语言编写代码实现网络计算机之间的数据交互
为什么需要通信协议
- 协议即规则,好比汽车上路要遵守交通规则一样
- 为了使全世界不同类型的计算机都可以连接起来,所以需要通信协议
- 有了Internet协议,任何私有网络,只要支持这个协议,就可以接入互联网
Internet协议的主要协议及其层次关系

TCP/IP协议
TCP/IP协议
- TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇
- FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是因为在TCP/IP协议中TCP协议和IP协议最具有代表性,所以被称为TCP/IP协议
- TCP协议是建立在IP协议之上。负责两台计算机之间建立可靠链接,保证数据包按顺序发送到


TCP协议的三次握手

UDP协议
UDP协议
- 用户数据包协议(User Datagram Protocol)
- UDP协议是面向无连接的协议
- 知道对方的IP地址和端口,就可以直接发送数据包
- 由于是面向无连接,所以无法保证数据一定会到达
端口
- 用于区分不同的应用程序,80端口分给了HTTP服务,21端口分给了FTP服务
TCP和UDP的区别
连接方面的区别
安全方面的区别
- TCP传输消息可靠,不丢失,按顺序到达;UDP无法保证不丢包
传输效率的区别
连接对象数量的区别
- TCP连接只能是点到点,一对一的;UDP支持一对一,一对多,多对多的交互通信
Socket简介
Socket

Socket的常用方法

TCP编程
TCP服务器端流程
- 使用socket() 函数创建一个套接字
- 使用bind((ip, port)) 函数绑定IP地址和port
- 使用listen() 函数开始TCP监听
- 使用accept() 函数等待客户端的连接
- 使用recv()/send() 函数接收发送的数据
- 使用close() 关闭套接字
TCP客户端与服务器端通信模型

编写服务器端
import socket
ip = '127.0.0.1'
port = 8888
print('--------服务器端已启动--------')
socket_obj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket_obj.bind((ip, 8888))
socket_obj.listen(5)
client_socket_obj, addr = socket_obj.accept()
print('--------成功建立连接--------')
info = client_socket_obj.recv(1024).decode('utf-8')
while info != 'bye':
if info != '':
print('接收到的数据是:', info)
data = input('请输入要发送的内容:')
client_socket_obj.send(data.encode('utf-8'))
if data == 'bye':
break
info = client_socket_obj.recv(1024).decode('utf-8')
client_socket_obj.close()
socket_obj.close()
编写客户端
import socket
client_socket = socket.socket()
ip = '127.0.0.1'
port = 8888
client_socket.connect((ip, port))
print('--------已建立服务器连接--------')
info = ''
while info != 'bye':
send_data = input('请客户端输入要发送的数据:')
client_socket.send(send_data.encode('utf-8'))
if send_data == 'bye':
break
info = client_socket.recv(1024).decode('utf-8')
print('收到服务器的响应数据是:', info)
client_socket.close()