如何使用tcp實(shí)現(xiàn)局域網(wǎng)內(nèi)文件傳輸
局域網(wǎng)通常是分布在一個(gè)有限地理范圍內(nèi)的網(wǎng)絡(luò)系統(tǒng),一般所涉及的地理范圍只有幾公里。局域網(wǎng)專用性非常強(qiáng),具有比較穩(wěn)定和規(guī)范的拓?fù)浣Y(jié)構(gòu)。這篇文章主要介紹了python使用tcp實(shí)現(xiàn)局域網(wǎng)內(nèi)文件傳輸,文件包括文本,圖片,視頻等,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
具體功能:
可以利用python創(chuàng)建的TCP客戶端從我們自己搭建的TCP服務(wù)器上下載文件。
實(shí)現(xiàn)需求:
安裝socket模塊
簡(jiǎn)單了解sokcet模塊用法
服務(wù)器代碼如下:
import socket
def file_deal(file_name):
# 定義函數(shù)用于處理用戶索要下載的文件
try:
# 二進(jìn)制方式讀取
files = open(file_name, "rb")
mes = files.read()
except:
print("沒有該文件")
else:
files.close()
return mes
def main():
# 創(chuàng)建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 固定端口號(hào)
tcp_socket.bind(("",8888))
# 將主動(dòng)套接字轉(zhuǎn)為被動(dòng)套接字
tcp_socket.listen(128)
while True:
# 利用accept獲取分套接字以及客戶端的地址
client_socket,client_addr = tcp_socket.accept()
# 接收客戶端的數(shù)據(jù)
file_name = client_socket.recv(4096)
# 調(diào)用函數(shù)處理用戶下載的文件
mes = file_deal(file_name)
if mes:
# 如果文件不為空發(fā)送
client_socket.send(mes)
#關(guān)閉分套接字
client_socket.close()
if __name__ == "__main__":
main()
import socket
def file_deal(file_name):
# 定義函數(shù)用于處理用戶索要下載的文件
try:
# 二進(jìn)制方式讀取
files = open(file_name, "rb")
mes = files.read()
except:
print("沒有該文件")
else:
files.close()
return mes
def main():
# 創(chuàng)建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 固定端口號(hào)
tcp_socket.bind(("",8888))
# 將主動(dòng)套接字轉(zhuǎn)為被動(dòng)套接字
tcp_socket.listen(128)
while True:
# 利用accept獲取分套接字以及客戶端的地址
client_socket,client_addr = tcp_socket.accept()
# 接收客戶端的數(shù)據(jù)
file_name = client_socket.recv(4096)
# 調(diào)用函數(shù)處理用戶下載的文件
mes = file_deal(file_name)
if mes:
# 如果文件不為空發(fā)送
client_socket.send(mes)
#關(guān)閉分套接字
client_socket.close()
if __name__ == "__main__":
main()
客戶端代碼:
from socket import *
import os
def main():
# 建立套接字
tcp_socket = socket(AF_INET, SOCK_STREAM)
# 接收用輸入的服務(wù)器端的ip和端口
tcp_ip = input("請(qǐng)輸入ip:")
tcp_port = int(input("請(qǐng)輸入端口:"))
# 連接服務(wù)器
tcp_socket.connect((tcp_ip, tcp_port))
# 輸入要下載的文件名
file_name = input("請(qǐng)輸入要下載的文件名:")
# 將文件名發(fā)送至服務(wù)器端
tcp_socket.send(file_name.encode())
# 創(chuàng)建一個(gè)空文件
new_file = open(file_name, "wb")
# 用與計(jì)算讀取的字節(jié)數(shù)
time = 0
while True:
# 接收服務(wù)器端返回的內(nèi)容
mes = tcp_socket.recv(4096)
# 如果內(nèi)容不為空?qǐng)?zhí)行
if mes:
# 解碼并向文件內(nèi)寫入
new_file.write(mes.decode())
# 計(jì)算字節(jié)
time += len(mes)
else:
# 如果字節(jié)數(shù)為空即未收到內(nèi)容
if time == 0:
# 關(guān)閉文件
new_file.close()
# 刪除剛剛創(chuàng)建的文件
os.remove(file_name)
print("沒有您要下載的文件")
else:
# 如過time有值時(shí)name文件傳輸完成
print("文件下載成功")
break
# 關(guān)閉套接字
tcp_socket.close()
if __name__ == '__main__':
main()
補(bǔ)充:局域網(wǎng)、校園網(wǎng)安全維護(hù)方法
校園網(wǎng)絡(luò)分為內(nèi)網(wǎng)和外網(wǎng),就是說他們可以上學(xué)校的內(nèi)網(wǎng)也可以同時(shí)上互聯(lián)網(wǎng),大學(xué)的學(xué)生平時(shí)要玩游戲購(gòu)物,學(xué)校本身有自己的服務(wù)器需要維護(hù);
在大環(huán)境下,首先在校園網(wǎng)之間及其互聯(lián)網(wǎng)接入處,需要設(shè)置防火墻設(shè)備,防止外部攻擊,并且要經(jīng)常更新抵御外來(lái)攻擊;
由于要保護(hù)校園網(wǎng)所有用戶的安全,我們要安全加固,除了防火墻還要增加如ips,ids等防病毒入侵檢測(cè)設(shè)備對(duì)外部數(shù)據(jù)進(jìn)行分析檢測(cè),確保校園網(wǎng)的安全;
外面做好防護(hù)措施,內(nèi)部同樣要做好防護(hù)措施,因?yàn)橛械膶W(xué)生電腦可能帶回家或者在外面感染,所以內(nèi)部核心交換機(jī)上要設(shè)置vlan隔離,旁掛安全設(shè)備對(duì)端口進(jìn)行檢測(cè)防護(hù);
內(nèi)網(wǎng)可能有ddos攻擊或者arp病毒等傳播,所以我們要對(duì)服務(wù)器或者電腦安裝殺毒軟件,特別是學(xué)校服務(wù)器系統(tǒng)等,安全正版安全軟件,保護(hù)重要電腦的安全;
對(duì)服務(wù)器本身我們要安全server版系統(tǒng),經(jīng)常修復(fù)漏洞及更新安全軟件,普通電腦一般都是撥號(hào)上網(wǎng),如果有異常上層設(shè)備監(jiān)測(cè)一般不影響其他電腦。做好安全防范措施,未雨綢繆。
如何使用tcp實(shí)現(xiàn)局域網(wǎng)內(nèi)文件傳輸相關(guān)文章:
1.兩臺(tái)電腦在同一個(gè)局域網(wǎng)怎么傳輸文件(2)
2.如何簡(jiǎn)單設(shè)置一個(gè)局域網(wǎng)
3.局域網(wǎng)資源共享的實(shí)現(xiàn)的方法