# tcp文件传输
# from socket import *
# s=socket()
# s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
# s.bind(('0.0.0.0',4561))
# s.listen(3)
# faddr=input('请输入文件地址')
# f=open(faddr,'wb')
# print('等待连接')
# c,addr=s.accept()
# print('链接成功')
# while True:
#     data=c.recv(1024)
#     if not data:
#         break
#     f.write(data)
# f.close()
# c.close()
# s.close()
# *************************************************
# from socket import *
# s=socket()
# s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
# s.connect(('127.0.0.1',4561))
# faddr=input('请输入文件地址')
# f=open(faddr,'rb')
# print('链接成功')
# while True:
#     data=f.read(1024)
#     if not data:
#         break
#     s.send(data)
# f.close()
# s.close()

用Socket编程实现TCP文件传输

一、概述

Socket编程是网络编程的基础,它允许不同计算机之间的应用程序通过网络进行通信。在本博客中,我们将探讨如何使用Socket编程实现TCP文件传输。我们将构建一个简单的客户端-服务器模型,其中服务器负责接收文件,而客户端负责发送文件。

二、实现步骤

1. 服务器端

服务器端的主要任务是监听客户端的连接请求,并接收文件数据。

from socket import *
s = socket()
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind(('0.0.0.0', 4561))
s.listen(3)
# 提示用户输入文件地址
faddr = input('请输入文件地址: ')
f = open(faddr, 'wb')
print('等待连接...')
c, addr = s.accept()
print('连接成功,来自:', addr)
while True:
    data = c.recv(1024)
    if not data:
        break
    f.write(data)
f.close()
c.close()
s.close()

代码解析:

  • 创建一个Socket对象,并设置可重用地址选项。
  • 绑定服务器地址和端口,开始监听连接。
  • 提示用户输入要保存的文件地址,并以二进制写模式打开文件。
  • 接受客户端连接,打印连接信息。
  • 循环接收数据,直到没有数据为止,然后将数据写入文件。
  • 关闭文件和Socket连接。

2. 客户端

客户端的主要任务是连接到服务器,并发送文件数据。

from socket import *
s = socket()
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.connect(('127.0.0.1', 4561))
# 提示用户输入文件地址
faddr = input('请输入文件地址: ')
f = open(faddr, 'rb')
print('连接成功,准备发送文件...')
while True:
    data = f.read(1024)
    if not data:
        break
    s.send(data)
f.close()
s.close()

代码解析:

  • 创建一个Socket对象,并设置可重用地址选项。
  • 连接到服务器的IP地址和端口。
  • 提示用户输入要发送的文件地址,并以二进制读模式打开文件。
  • 循环读取文件数据,并发送给服务器,直到文件末尾。
  • 关闭文件和Socket连接。

三、运行步骤

  1. 首先运行服务器端代码,服务器开始监听连接。
  2. 然后运行客户端代码,连接到服务器并发送文件。
  3. 服务器接收文件数据并保存到指定位置。

四、总结

通过上述步骤,我们成功地使用Socket编程实现了TCP文件传输。这个简单的例子展示了Socket编程的基本原理和应用。在实际应用中,我们可以在此基础上进行扩展,例如添加错误处理、进度显示、多文件传输等功能,以满足更复杂的需求。

Logo

「智能机器人开发者大赛」官方平台,致力于为开发者和参赛选手提供赛事技术指导、行业标准解读及团队实战案例解析;聚焦智能机器人开发全栈技术闭环,助力开发者攻克技术瓶颈,促进软硬件集成、场景应用及商业化落地的深度研讨。 加入智能机器人开发者社区iRobot Developer,与全球极客并肩突破技术边界,定义机器人开发的未来范式!

更多推荐