一、伺服器程式要求永遠運行,一般用死迴圈來處理 1.伺服器改造版本V03(主程式 原封不動,這裡只修改了運行的程式) if __name__ == "__main__": while True: try: print("Start Server") serverFunc() print("End S ...
一、伺服器程式要求永遠運行,一般用死迴圈來處理
1.伺服器改造版本V03(主程式
原封不動,這裡只修改了運行的程式) if __name__ == "__main__": while True: try: print("Start Server") serverFunc() print("End Server") except Exception as e: print(e) time.sleep(1)
二、TCP編程
1.面向鏈接的傳輸,即每次傳輸之前需要先建立一個實例
2.客戶端和服務端兩個程式需要編寫
3.Server端的編寫流程
(1)建立socket負責具體通信,這個socket其實只負責接受對方的請求
(2)綁定埠和地址
(3)監聽接入的訪問socket
(4)接受訪問的socket,可以理解接受訪問即建立了一個通訊的鏈接通路
(5)接受對方的發送內容,利用接收到的socket接受內容
(6)如果有必要,給對方發送反饋信息
(7)關閉鏈接通路
4.Client端流程
(1)建立通信socket
(2)鏈接對方,請求跟對方建立通路
(3)發送內容到對方伺服器
(4)接受對方的反饋
(5)關閉鏈接通路
5.舉例
import socket def tcp_srv(): sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#其哪一個參數為ipv4,後一個參數為TCP固定參數 addr = ("127.0.0.1",8998)#ip地址和埠號 sock.bind(addr)#綁定addr sock.listen()#監聽接入的訪問socket while True: #接受訪問的socket,可以理解為接受訪問即建立一個通訊的鏈接通路,accept返回的元組第一個元素賦給skt,第二個元素賦給addr skt,addr = sock.accept()#第一個元素是socket,第一個元素就是發送方的地址 #接受對方的發送內容,利用接受到的socket接受內容 msg = skt.recv(500)#500代表接收使用的buffersize,理解為接受內容的大小 msg = msg.decode()#接受到的是bytes格式內容,想得到str格式的,需要進行解碼 #下麵三行代表反饋的信息 rst = "Received msg:{0} from {1}".format(msg,addr) print(rst) skt.send(rst.encode()) #關閉socket skt.close() if __name__ == "__main__": print("Startint tcp server.......") tcp_srv() print("Ending tcp server.........")
import socket def tcp_clt(): sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) addr = ("127.0.0.1",8998) sock.connect(addr)#鏈接addr這個地址,建立tcp這個通道 msg = "I am a good man" sock.send(msg.encode()) rst = sock.recv(500)#接受對方的反饋 print(rst.decode()) sock.close() if __name__ == "__main__": tcp_clt()
解釋:先運行了伺服器端的程式一次,然後運行了客戶端程式四次,可以看到伺服器端(埠8998)接收到了四次客戶端發來的消息,並且每一次發來消息的埠都不一樣,按照升序53256-53259.
三、FTP編程
FTP(FileTransferProtocal)文件傳輸協議
用途:定製一些特殊的上傳下載文件的服務
用戶分類:登錄FTP伺服器必須有一個賬號
(1)Real賬戶:註冊賬戶
(2)Guest賬戶:可能臨時對某一類人的行為進行授權
(3)Anoymous賬戶:匿名賬戶,允許任何人
四、源碼
D33_3_LoopOfServer.py
D33_4_TCPSever.py
D33_5_TCPClient.py
https://github.com/ruigege66/Python_learning/blob/master/D33_3_LoopOfServer.py
https://github.com/ruigege66/Python_learning/blob/master/D33_4_TCPSever.py
https://github.com/ruigege66/Python_learning/blob/master/D33_5_TCPClient.py
2.CSDN:https://blog.csdn.net/weixin_44630050(心悅君兮君不知-睿)
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料