网络编程 - 实现文件传送

一、md5验证

import hashlib
m=hashlib.md5()
m.update(b"test")
print (m.hexdigest())
结果:098f6bcd4621d373cade4e832627b4f6

二、客户端代码
  
#客户端
import socket
client=socket.socket() #生成socket连接对象
client.connect(("localhost",6969))
while True:
msg=input(">>>:")
if not msg:
continue
if msg.startswith("get"):
client.send(msg.encode("utf-8")) #发送命令到服务端 ;
cmd_res_size=client.recv(1024) #接收文件的大小;
print ("文件大小为:",cmd_res_size)
client.send(b"ready to recv file..")
cmd_size=0
cmd_data=b''
filename=msg.split()[1]
f=open(filename+".new","wb")
while cmd_size!=int(cmd_res_size.decode()):
data=client.recv(1024)
cmd_size+=len(data)
f.write(data)
else:
print ("cmd received done !",cmd_size)
print (cmd_data.decode())
f.close()
client.close()
三、服务端
  
#服务端
import socket,os
so_server=socket.socket()
so_server.bind(("localhost",6969))
so_server.listen()
print ("等电话!")
while True: #实现多个链路连接;
conn,addr=so_server.accept()
print ("new connect",addr)
while True:
print ("等待新指令!")
data = conn.recv(1024)
if not data:
print("客户端已经断开")
break
cmd,filename=data.decode().split()
if os.path.isfile(filename):
f=open(filename,"rb")
file_size=str(os.stat(filename).st_size)
print (file_size.encode())
conn.send(file_size.encode())
conn.recv(1024) #wait for ack;
for line in f:
conn.send(line)
f.close()
so_server.close()

8.文件md5较验.

 

转载于:https://www.cnblogs.com/wulafuer/p/10185970.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个简单高效的网络文件传输程序,适合嵌入式系统使用。 14 鎸囧畾浣跨敤鐨勫崗璁皣:AF_INET锛圛Pv4锛?AF_INET6锛圛Pv6锛?AF_LOCAL锛圲NIX鍗忚锛?AF_ROUTE锛堣矾鐢卞鎺ュ瓧锛?AF_KEY锛堢閽ュ鎺ュ瓧锛? 15 type: 16 鎸囧畾浣跨敤鐨勫鎺ュ瓧鐨勭被鍨?SOCK_STREAM锛堝瓧鑺傛祦濂楁帴瀛楋級 SOCK_DGRAM 17 protocol: 18 濡傛灉濂楁帴瀛楃被鍨嬩笉鏄師濮嬪鎺ュ瓧锛岄偅涔堣繖涓弬鏁板氨涓? 19 2銆乮nt bind(int sockfd, struct sockaddr *myaddr, int addrlen) 20 sockfd: 21 socket鍑芥暟杩斿洖鐨勫鎺ュ瓧鎻忚堪绗? 22 myaddr: 23 鏄寚鍚戞湰鍦癐P鍦板潃鐨勭粨鏋勪綋鎸囬拡 24 myaddrlen: 25 缁撴瀯闀垮害 26 struct sockaddr{ 27 unsigned short sa_family; //閫氫俊鍗忚绫诲瀷鏃廇F_xx 28 char sa_data[14]; //14瀛楄妭鍗忚鍦板潃锛屽寘鍚socket鐨処P鍦板潃鍜岀鍙e彿 29 }; 30 struct sockaddr_in{ 31 short int sin_family; //閫氫俊鍗忚绫诲瀷鏃? 32 unsigned short int sin_port; //绔彛鍙? 33 struct in_addr sin_addr; //IP鍦板潃 34 unsigned char si_zero[8]; //濉厖0浠ヤ繚鎸佷笌sockaddr缁撴瀯鐨勯暱搴︾浉鍚? 35 }; 36 3銆乮nt connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen) 37 sockfd: 38 socket鍑芥暟杩斿洖濂楁帴瀛楁弿杩扮 39 serv_addr: 40 鏈嶅姟鍣↖P鍦板潃缁撴瀯鎸囬拡 41 addrlen: 42 缁撴瀯浣撴寚閽堢殑闀垮害 43 4銆乮nt listen(int sockfd, int backlog) 44 sockfd: 45 socket鍑芥暟缁戝畾bind鍚庡鎺ュ瓧鎻忚堪绗? 46 backlog: 47 璁剧疆鍙繛鎺ュ鎴风鐨勬渶澶ц繛鎺ヤ釜鏁帮紝褰撴湁澶氫釜瀹㈡埛绔悜鏈嶅姟鍣ㄨ姹傛椂锛屾敹鍒版鍊肩殑褰卞搷銆傞粯璁ゅ€?0 48 5銆乮nt accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen) 49 sockfd: 50 socket鍑芥暟缁忚繃listen鍚庡鎺ュ瓧鎻忚堪绗? 51 cliaddr: 52 瀹㈡埛绔鎺ュ瓧鎺ュ彛鍦板潃缁撴瀯 53 addrlen: 54 瀹㈡埛绔湴鍧€缁撴瀯闀垮害 55 6銆乮nt send(int sockfd, const void *msg,int len,int flags) 56 7銆乮nt recv(int sockfd, void *buf,int len,unsigned int flags) 57 sockfd: 58 socket鍑芥暟鐨勫鎺ュ瓧鎻忚堪绗? 59 msg: 60 鍙戦€佹暟鎹殑鎸囬拡 61 buf: 62 瀛樻斁鎺ユ敹鏁版嵁鐨勭紦鍐插尯 63 len: 64 鏁版嵁鐨勯暱搴︼紝鎶奻lags璁剧疆涓? 65 *************************************************************************************************************************/ int main(int argc, char *argv[]) { int fd,new_fd,struct_len,numbytes,total_read=0; struct sockaddr_in server_addr; struct sockaddr_in client_addr; char buff[BUFSIZ]; char fname[255]; //鐢ㄤ簬瀛樻斁鏂囦欢鍚? FILE * fp; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8000); server_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(server_addr.sin_zero), 8); struct_len = sizeof(struct sockaddr_in); fd = socket(AF_INET, SOCK_STREAM, 0); while(bind(fd, (struct sockaddr *)&server;_addr, struct_len) == -1); printf("Bind Success!\n"); while(listen(fd, 10) == -1); printf("Listening....\n");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值