目录
1.网络基础
1.1TCP协议
1.2UDP协议
1.3Socket简介
2.TCP编程
2.1TCP客户端示例
2.2TCP服务器示例
3.UDP编程
3.1UDP客户端示例
3.2UDP服务器示例
4.小案例:简易聊天应用
4.1TCP聊天客户端
4.2TCP聊天服务器
网络编程是指通过计算机网络进行数据交换的编程技术。在 Python 中,网络编程主要通过socket
模块实现。
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。特点包括:
TCP 通信流程:
UDP(用户数据报协议)是一种无连接的传输层协议。特点包括:
UDP 通信流程:
Socket 是网络通信的基础,是实现网络编程的抽象层。在 Python 中,socket 模块提供了对 Socket 的封装,使得我们可以轻松实现 TCP 和 UDP 通信。Socket 接口提供了发送、接收、连接、断开等操作,允许我们在程序中实现网络通信。
在 TCP 编程中,客户端和服务器之间的通信需要经过连接的建立和断开。以下是基于 Python 实现 TCP 客户端和服务器的示例。
import socket
def tcp_client():
# 创建一个TCP客户端socket
# AF_INET表示IPv4协议,SOCK_STREAM表示TCP协议
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器(IP和端口)
client_socket.connect(('127.0.0.1', 12345))
# 发送数据
message = 'Hello,Server'
client_socket.send(message.encode('utf-8'))#发送数据时需要进行编码
#接受服务器响应
response = client_socket.recv(1024)#接收最多1024字节的数据
print('Received from server:',response.decode('utf-8'))#接收到的数据需要解码
#关闭连接
client_sockent.close()
if_name_=='_main_'
tcp_cilent()
解释:
import socket
def tcp_server():
# 创建一个TCP服务器socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定服务器地址和端口
server_socket.bind(('127.0.0.1', 12345))
# 开始监听连接,最大连接数为5
server_socket.listen(5)
print('Server is listening...')
while True:
# 接受客户端连接
client_socket, client_address = server_socket.accept()
print(f'Received message: {message.decode("utf-8")})
#发送响应
client_socket.send(b'Hello,Client')#发送响应数据,需要编码成字节形式
#关闭连接
client_socket.close()
if_name_=='_main_'
tcp_server()
解释:
UDP 编程与 TCP 编程的最大区别在于 UDP 不需要建立连接,客户端和服务器直接发送和接收数据。
import socket
def udp_client():
# 创建UDP客户端socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 发送数据
message = 'Hello, UDP Server'
client_socket.sendto(message.encode('utf-8'), ('127.0.0.1', 12345)) # 发送数据并指定目标地址
# 接收服务器响应
response, server_address = client_socket.recvfrom(1024) # 接收数据和服务器地址
print('Received from server:', response.decode('utf-8'))
#关闭socket
client_socket.close()
if_name_=='_main_'
udp_client()
解释:
import socket
def udp_server():
# 创建UDP服务器socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定服务器地址和端口
server_socket.bind(('127.0.0.1', 12345))
print('Server is listening...')
while True:
# 接收客户端消息
message, client_address = server_socket.recvfrom(1024) # 接收数据和客户端地址
print(f'Received message: {message.decode("utf-8")}')
# 发送响应
server_socket.sendto(b'Hello, UDP Client', client_address) # 向客户端发送响应
if __name__ == '__main__':
udp_server()
解释:
在本节中,我们设计一个简单的 TCP 聊天应用。客户端和服务器通过 TCP 协议进行通信,客户端发送消息,服务器接收并返回响应。
import socket
def tcp_chat_client():
# 创建TCP客户端Socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 12345)) # 连接服务器
while True:
message = input('You: ') # 从用户输入获取消息
if message.lower() == 'exit': # 输入exit退出聊天
break
client_socket.send(message.encode('utf-8')) # 发送消息
response = client_socket.recv(1024) # 接收服务器响应
print('Server:', response.decode('utf-8')) # 打印服务器响应
client_socket.close()
if __name__ == '__main__':
tcp_chat_client()
import socket
def tcp_chat_server():
# 创建TCP服务器Socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 12345)) # 绑定IP和端口
server_socket.listen(5) # 开始监听
print('Server is waiting for connection...')
client_socket, client_address = server_socket.accept() # 接受客户端连接
print(f'Connection established with {client_address}')
while True:
# 接收客户端消息
message = client_socket.recv(1024) # 接收消息
if not message:
break # 如果没有接收到消息,则退出
print('Client:', message.decode('utf-8')) # 打印客户端消息
response = input('You: ') # 从服务器端输入回应
client_socket.send(response.encode('utf-8')) # 发送回应给客户端
client_socket.close() # 关闭客户端连接
server_socket.close() # 关闭服务器连接
if __name__ == '__main__':
tcp_chat_server()