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("传输完成....")