用udp和tcp知识写一个文件传输
使用UDP和TCP进行文件传输的代码示例如下:
- 使用UDP进行文件传输:
发送端代码:
import socket
def send_file(file_name, server_ip, server_port):
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
file = open(file_name, "rb")
data = file.read()
udp_socket.sendto(data, (server_ip, server_port))
udp_socket.close()
file.close()
# 调用示例
send_file("file.txt", "127.0.0.1", 1234)
接收端代码:
import socket
def receive_file(file_name, server_ip, server_port):
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind((server_ip, server_port))
data, addr = udp_socket.recvfrom(1024)
file = open(file_name, "wb")
file.write(data)
udp_socket.close()
file.close()
# 调用示例
receive_file("received_file.txt", "127.0.0.1", 1234)
- 使用TCP进行文件传输:
发送端代码:
import socket
def send_file(file_name, server_ip, server_port):
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.connect((server_ip, server_port))
file = open(file_name, "rb")
data = file.read()
tcp_socket.send(data)
tcp_socket.close()
file.close()
# 调用示例
send_file("file.txt", "127.0.0.1", 1234)
接收端代码:
import socket
def receive_file(file_name, server_ip, server_port):
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.bind((server_ip, server_port))
tcp_socket.listen(1)
conn, addr = tcp_socket.accept()
file = open(file_name, "wb")
data = conn.recv(1024)
while data:
file.write(data)
data = conn.recv(1024)
conn.close()
tcp_socket.close()
file.close()
# 调用示例
receive_file("received_file.txt", "127.0.0.1", 1234)
以上代码示例分别使用UDP和TCP实现了文件的发送和接收。需要注意的是,UDP是面向无连接的协议,没有可靠性保证,因此在实际使用时可能需要对数据进行分片和重传等处理。而TCP是面向连接的协议,会自动处理数据的可靠传输,但会引入一定的传输延迟。具体使用哪种协议取决于应用的要求和网络环境
原文地址: https://www.cveoy.top/t/topic/iyGe 著作权归作者所有。请勿转载和采集!