一、服務端**為:
1二、客戶端**為:import
socket
2import
subprocess
3import
struct
4import
json
5importos6
7 share_dir = r'
c:\users\xu516\pycharmprojects\python全棧開發\第三模組\網路程式設計\06_檔案傳輸\優化版本_寫函式\server\share'8
910defget(conn, cmds):
11 filename = cmds[1]12#
3、以讀的方式開啟檔案,讀取檔案內容傳送到客戶端
1314
#第一步:製作固定長度的報頭
15 header_dic =
2021 header_json =json.dumps(header_dic)
22 header_bytes = header_json.encode('
utf-8')
2324
#第二步:先傳送報頭的長度
25 conn.send(struct.pack('i'
, len(header_bytes)))
2627
#第三步:把包頭傳送給客戶端
28conn.send(header_bytes)
2930
#第三步:再傳送真實的資料
31 with open(r'
%s\%s
' % (share_dir, filename), 'rb'
) as f:32#
conn.send(f.read())
33for line in
f:34
conn.send(line)
3536
37def
run():
38 phone =socket.socket(socket.af_inet, socket.sock_stream)39#
phone.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)
40 phone.bind(('
127.0.0.1
', 8081)) #
0-65535:0-1024給作業系統使用
41 phone.listen(5)
4243
print('
starting......')
44while true: #
鏈結迴圈
45 conn, client_addr =phone.accept()
46print
(client_addr)
4748
while true: #
通訊迴圈
49try:50
#1、收命令
51 res = conn.recv(8096) #
b'get a.txt'
52if
not res: #
適用於linux作業系統
53break
5455
#2、解析命令,提取相應命令引數
56 cmds = res.decode('
utf-8
').split() #
['get', 'a.txt']
57if cmds[0] == '
get':58
get(conn, cmds)
5960
except connectionreseterror: #
適用於windows作業系統
61break
6263
conn.close()
6465
phone.close()
6667
68if
__name__ == '
__main__':
69 run()
1import
socket
2import
struct
3import
json
45 download_dir = r'
c:\users\xu516\pycharmprojects\python全棧開發\第三模組\網路程式設計\06_檔案傳輸\優化版本_寫函式\client\download'6
78defget(phone, cmds):9#
2、以寫的方式開啟乙個新檔案,接收伺服器端發來的檔案內容寫入客戶的新檔案
1011
#第一步:先收報頭的長度
12 obj = phone.recv(4)
13 header_size = struct.unpack('i'
, obj)[0]
1415
#第二步:再收報頭
16 header_bytes =phone.recv(header_size)
1718
#第三步:從報頭中解析出對真實資料的描述資訊
19 header_json = header_bytes.decode('
utf-8')
20 header_dic =json.loads(header_json)
21print
(header_dic)
22 total_size = header_dic['
file_size']
23 filename = header_dic['
filename']
2425
#第四步: 接收真實的資料
26 with open('
%s\%s
' % (download_dir, filename), 'wb'
) as f:
27 recv_size =0
28while recv_size
29 line = phone.recv(1024)
30f.write(line)
31 recv_size +=len(line)
32print('
' %(total_size, recv_size))
3334
35def
put(phone, cmds):
36pass
3738
39def
run():
40 phone =socket.socket(socket.af_inet, socket.sock_stream)
41 phone.connect(('
127.0.0.1
', 8081))
4243
while
true:44#
1、發命令
客戶端執行結果為:
1 >>:get test.py2 4 >>:
VC 網路程式設計 檔案傳輸
在socket程式設計中,以前學習的時候都是簡單的字元傳輸,而在實際的應用中,經常需要傳輸檔案,其實網路上的檔案傳輸都是先把資料轉化為位元組流,當然,最底層的是01二進位制資料的傳輸,但是這部在我們討論範圍之內,其實現在還只是研究小檔案怎麼傳輸,當檔案很大時,需要用到斷點續傳。好了,要傳輸檔案,首先...
VC 網路程式設計 檔案傳輸
在socket程式設計中,以前學習的時候都是簡單的字元傳輸,而在實際的應用中,經常需要傳輸檔案,其實網路上的檔案傳輸都是先把資料轉化為位元組流,當然,最底層的是01二進位制資料的傳輸,但是這部在我們討論範圍之內,其實現在還只是研究小檔案怎麼傳輸,當檔案很大時,需要用到斷點續傳。好了,要傳輸檔案,首先...
Python檔案傳輸
encode是編碼 例如 name.encode gb2312 表示將字串name以gb2312編碼。decode是解碼 例如 name.decode gb2312 表示將字串name以gb2312解碼。按行讀取txt裡的檔名,把檔案移到指定的路徑裡。coding utf 8 import thre...