一、介绍说明
TCP(传输控制协议)
-
面向连接:TCP在数据传输之前必须建立连接。这通过一个称为三次握手的过程来完成,确保连接的两端都准备好进行数据传输。
-
可靠性:TCP提供可靠的数据传输,确保数据包正确无误地到达目的地。如果数据包在传输过程中丢失或损坏,TCP会重新发送这些数据包。
-
有序性:TCP保证数据包按照发送的顺序到达接收端。接收方会根据数据包的序列号重新组装数据。
-
拥塞控制:TCP具有拥塞控制机制,能够根据网络状况调整数据发送速率,以避免网络拥塞。
-
流量控制:TCP使用滑动窗口机制来控制发送方的数据流量,确保接收方不会因为数据量过大而无法处理。
-
全双工通信:TCP允许数据在两个方向上同时传输,即发送方和接收方可以同时发送和接收数据。
-
适用场景:由于TCP的可靠性和有序性,它适用于需要数据完整性和顺序的应用,如网页浏览(HTTP)、文件传输(FTP)、电子邮件(SMTP)和远程登录(SSH)。
UDP(用户数据报协议)
-
无连接:UDP是一个无连接的协议,数据传输前不需要建立连接。发送方可以直接发送数据包,而不需要等待接收方的确认。
-
不可靠性:UDP不保证数据包的可靠传输。数据包可能会丢失、重复或乱序到达,但UDP不负责重新发送丢失的数据包。
-
低延迟:由于UDP没有建立连接和复杂的控制机制,它通常具有较低的延迟,适合需要快速传输的应用。
-
简单性:UDP的协议结构简单,头部开销小,这使得它在需要快速、简单传输的场景下非常有效。
-
适用场景:UDP适用于对实时性要求高、可以容忍一定数据丢失的应用。例如,视频会议、在线游戏、DNS查询和某些类型的流媒体服务。
二、简单代码示例
TCP服务器示例(Python)
import socket
def tcp_server():
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置服务器地址和端口
host = '127.0.0.1'
port = 12345
# 绑定地址和端口
server_socket.bind((host, port))
# 开始监听连接
server_socket.listen(5)
print("服务器启动,等待连接...")
while True:
# 接受客户端连接
client_socket, addr = server_socket.accept()
print(f"接收到来自 {addr} 的连接")
# 接收数据
data = client_socket.recv(1024)
if not data:
break
print(f"收到数据:{data.decode('utf-8')}")
# 发送数据
client_socket.sendall(data)
# 关闭客户端连接
client_socket.close()
if __name__ == '__main__':
tcp_server()
TCP客户端示例(Python)
import socket
def tcp_client():
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置服务器地址和端口
host = '127.0.0.1'
port = 12345
# 连接服务器
client_socket.connect((host, port))
# 发送数据
message = 'Hello, Server!'
client_socket.sendall(message.encode('utf-8'))
# 接收数据
data = client_socket.recv(1024)
print(f"收到服务器响应:{data.decode('utf-8')}")
# 关闭连接
client_socket.close()
if __name__ == '__main__':
tcp_client()
UDP服务器示例(Python)
import socket
def udp_server():
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 设置服务器地址和端口
host = '127.0.0.1'
port = 12345
# 绑定地址和端口
server_socket.bind((host, port))
print("UDP服务器启动,等待数据...")
while True:
# 接收数据
data, addr = server_socket.recvfrom(1024)
print(f"收到来自 {addr} 的数据:{data.decode('utf-8')}")
# 发送响应数据
server_socket.sendto(b'收到你的数据', addr)
if __name__ == '__main__':
udp_server()
UDP客户端示例(Python)
import socket
def udp_client():
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 设置服务器地址和端口
host = '127.0.0.1'
port = 12345
# 发送数据
message = 'Hello, UDP Server!'
client_socket.sendto(message.encode('utf-8'), (host, port))
# 接收响应数据
data, server = client_socket.recvfrom(1024)
print(f"收到服务器响应:{data.decode('utf-8')}")
# 关闭socket
client_socket.close()
if __name__ == '__main__':
udp_client()
标签:__,UDP,浅谈,TCP,server,client,socket
From: https://blog.csdn.net/a876106354/article/details/141279008