利用socket进行局域网收发文件

首先在刷好linux的随身wifi准备创建接受端

注意发送接受双方编码一致

file_name = conn.recv(1024).decode('utf-8')
import socket

# 定义要绑定的IP地址和端口号
HOST = ''
PORT = 8888

# 创建socket对象并绑定到指定IP地址和端口号
s = socket.socket()
s.bind((HOST, PORT))

# 监听端口
s.listen(1)

# 等待连接
conn, addr = s.accept()
print('Connected by', addr)

# 接收文件名
file_name = conn.recv(1024).decode()


  


name=file_name[:file_name.find(".")]
if not os.path.exists(name):
open(name+".py", 'a').close()


with open(name+".py", 'wb') as f:
while True:
data = conn.recv(1024)
if not data:
break
f.write(data)

  
# 接收文件数据
with open(file_name, 'wb') as f:
    while True:
        data = conn.recv(1024)
        if not data:
            break
        f.write(data)

# 关闭连接
conn.close()

 执行就会阻塞等待,这时候服务器就会监听8888端口,并接收通过该端口发送来的文件,可以看到8888端口已经处于监听状态

 

客户端

import socket

def transfer_file(file_path, host, port):
    # 创建socket对象并连接到指定主机和端口
    s = socket.socket()
    s.connect((host, port))

    # 发送文件名
    file_name = file_path.split("/")[-1].encode('utf-8')
    s.send(file_name)

    # 发送文件数据
    with open(file_path, "rb") as f:
        while True:
            data = f.read(1024)
            if not data:
                break
            s.send(data)

    # 关闭socket连接
    s.close()

if __name__ == "__main__":
    # 定义目标主机和端口号
    target_host = "192.168.0.118"
    target_port = 8888

    # 定义要传输的文件路径
    file_path = "../serv.py"

    # 发送文件
    transfer_file(file_path, target_host, target_port)

  

 可以看到已经成功接收到文件

 

 

 

 

 

 

 

 

 

 

 

posted @ 2023-04-18 07:31  张喆坤  阅读(70)  评论(0编辑  收藏  举报