您好,登錄后才能下訂單哦!
話不多說,先看代碼:
客戶端:
import socket def main(): #creat: download_client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #link: serv_ip=input("please input server IP") serv_port=int(input(("please input server port"))) serv_addr=(serv_ip,serv_port) download_client.connect(serv_addr) #send and receive filename=input("please input filename") download_client.send(filename.encode("utf-8")) download_data=download_client.recv(1024) if download_data: with open("receive_"+filename,"wb") as f: f.write(download_data) download_client.close() if __name__ == '__main__': main()
import socket def send_data(server_socket): while True: filename = server_socket.recv(1024).decode("utf-8") print("用戶請求下載對象是%s"%filename) if filename: with open(filename, "rb") as f: file_data = f.read() server_socket.send(file_data) else: server_socket.close() break def main(): #creat server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #bind server.bind(("",4399)) #listen server.listen(128) #accept while True: print("waiting for quest") server_socket,client_ip=server.accept() print("connected") send_data(server_socket) #close server.close() if __name__ == '__main__': main()
前幾天有寫一個基于UDP的簡單程序,今天學(xué)習(xí)了TCP,TCP與UDP 的區(qū)別與聯(lián)系其實已經(jīng)寫得很清楚了,這里不再多說。今天使用的TCP,在文件下載方面應(yīng)用更加廣泛(可靠)??蛻舳朔治觯?br />
1.注意到TCP協(xié)議是面向連接的,也就是每一個TCP,從客戶端發(fā)送請求,需要與服務(wù)器建立一個連接(UDP不用)。所以這一點體現(xiàn)在程序中就有了一個connect動作
2.目前程序recv方法僅支持1kb,收發(fā)大文件會出錯,這點在我之后搞清楚大文件下載再說
服務(wù)器分析:
1.服務(wù)器是需要綁定的,也就是需要把他的地址定下來,這樣客戶端才會知道每次要和誰建立鏈接。
2.socket之listen,之前的網(wǎng)絡(luò)鏈接我們都是主動的去連接別人,如connect(),服務(wù)器是不需要連接別人的,所以他是一個被動連接,等著別人來連接他。listen就是拿來轉(zhuǎn)換的。后面的參數(shù)是參數(shù)指定隊列中最多可容納的等待接受的傳入連接數(shù)。若要確定可指定的最大連接數(shù),要參照 MaxConnections 值。也就是等著連接的最大數(shù)。
3.accept()返回參數(shù)是一個元組,前面我們就用兩個變量對他進行拆包了,第一個是一個socket對象,第二個是連接本服務(wù)器的地址。對于這個新的socket對象可以理解為服務(wù)器主socket接到連接后派遣了一個專員socket來對這個客戶端進行服務(wù)。
4.一個服務(wù)器可以被多個客戶端連接,每個客戶端都會被分配一個專員進行服務(wù)。
總結(jié):
客戶端流程:創(chuàng)建套接字(可綁定)—連接服務(wù)器—收發(fā)—關(guān)閉
服務(wù)器流程:創(chuàng)建套接字—綁定—監(jiān)聽連接—接收連接—收發(fā)—關(guān)閉
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。