欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输

程序员文章站 2022-07-01 08:02:06
...

思路

运行思路如下

  • 先导入socket模块,指定发送端的ip和端口号,并通过server.bind进行连接(必须是元组形式),然后通过server.accept()来接收客户连接,这时候就需要通过服务器端来进行响应了,响应的话也需要指定发送端的ip和端口号(与发送端同步),然后通过创建txt文档并通过while循环写入到文档中,判断依据是只要字节不为0,就一直传。

代码实现

# 客户端
import socket
# host = socket.gethostname() # 获取本地主机名
ip_addr=('10.16.56.100',8888)

server=socket.socket() #创建套接字对象
server.bind(ip_addr) #绑定IP地址和端口,必须是元组形式
server.listen(5) #设置连接池挂起的数量,并发选项
print('waiting for file...')
conn,ad=server.accept() #接收客户连接,conn是客户端连接服务端的信号,addr客户端ip,port
# 打开文件,并发送文件大小...
f=open("2.txt","r").read()
conn.send(bytes(str(len(f)),encoding="utf-8"))          #计算文件大小,并发送给远程
print("发送文件大小完成:",len(f))                        #打印一下,看结果...

conn.send(bytes(f,encoding="utf-8"))                    #开始发送数据
# 服务器端
import socket
import os
host = socket.gethostname() # 获取本地主机名
print('当前主机名称为: ' +host)
# ip_addr=(host,8888)
ip_addr=('10.16.56.100',8888)

client=socket.socket() #创建套接字对象
client.connect(ip_addr) #绑定IP地址和端口,必须是元组形式
print('connect success.....')
#接收文件大小,并保存在变量里
file_size=int(client.recv(1024))        #保存文件的大小
max_size=0                              #定义一个变量,用于做比较
print("这个文件大小为:",file_size)

f=open("1.txt","wb")

while file_size != max_size:           #如果不相等,则说明文件没有传输完
    data=client.recv(1024)             #每次传输1024字节
    f.write(data)
    max_size=max_size+len(data)        #将传输数据累加到变量
    print("本次传输:",max_size)

print("传输完成....")

传输结果

Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输