RECV:(接收方)
import socket
def main():
#创建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#获取ip/port
dest_ip = input("请输入对方的ip")
dest_port = int(input("请输入对方的端口"))
#连接服务器
tcp_socket.connect((dest_ip, dest_port))
#将文件的名字发送到服务器
download_filename = input("请输入要下载的文件名(包括拓展名):")
tcp_socket.send(download_filename.encode("utf-8"))
#接收发来的数据
recv_data = tcp_socket.recv(1024 * 1024 * 1024) # 1g(最大)
#保存数据到一个文件中
if recv_data:
with open("[新]" + download_filename, "wb") as f:
f.write(recv_data)
else:
print("没有接收到数据")
#关闭套接字
tcp_socket.close()
if __name__ == '__main__':
main()
SEND:(发送方/提供方)
import socket
def send_file_2_client(new_client_socket, client_addr):
# 接收客户端发送过来要接收的文件名
file_name = new_client_socket.recv(1024).decode("utf-8")
print("客户端%s需要下载的文件是%s" % (client_addr, file_name))
file_data = None
# 发送文件数据给客户端
try:
f = open(file_name, "rb")
file_data = f.read()
f.close()
except Exception as ret:
print("没有要传输的文件")
if file_data:
new_client_socket.send(file_data)
else:
print("数据为空")
def main():
#创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#绑定本地信息
tcp_server_socket.bind(("", 7788))
#让套机字由主动变为被动
tcp_server_socket.listen(128)#监听套接字负责等待新的客户端
while True:#--可以循环接收多个数据传输功能
#等待客户端连接
new_client_socket, client_addr = tcp_server_socket.accept()#用于产生新的套接字为客户端服务
#发送文件的函数
send_file_2_client(new_client_socket, client_addr)
new_client_socket.close()
#关闭套接字
tcp_server_socket.close()
if __name__ == "__main__":
main()
-
源代码链接
链接:https://pan.baidu.com/s/1KaBf25RlvvqqZ5N0fd53qg
提取码:l4dk -
可执行程序链接
链接:https://pan.baidu.com/s/1NCglAxCSY5LEdInYVIYfOw
提取码:e6ky