(P12)miniftpd專案實戰12:內部程式間通訊模組設計
文章目錄
1.內部程式間通訊模組設計
-
具體內容,請看第3章系統設計中:3.5內部程式間通訊模組設計
-
其他補充說明,為什麼要這樣做?接著上一節的寫好的程式碼
當前nobody程式與jjl程式之間沒有通訊,當jjl程式結束的時候,nobody程式沒有辦法結束
現在將客戶端斷開,那麼會話就沒有存在的價值,按道理nobody程式和ftp服務程式jjl都不應該存在
但是卻發現ftp程式處於僵死的狀態,nobody程式沒有結束
-
// FTP服務程式向nobody程式請求的命令
#define PRIV_SOCK_GET_DATA_SOCK 1,獲取主動模式資料連線socket
ftp服務程式不能直接建立資料連線通道,應該讓nobody程式來完成這個任務。
步驟如下:
FTP服務程式接收PORT h1,h2,h3,h4,p1,p2;
FTP服務程式要解析出客戶端的ip,port
FTP服務程式向nobody程式傳送一個PRIV_SOCK_GET_DATA_SOCK命令,讓他來完成建立資料連線通道的任務;
FTP服務程式還要向nobody程式傳送一個整數port 傳送4個位元組(雖然port是2個位元組)
FTP服務程式還要向nobody程式傳送一個字串ip 長度不定長
nobody程式接收PRIV_SOCK_GET_DATA_SOCK 這條命令建立一個主動模式的socket,
還要進一步接收一個整數,即port
還要進一步接收一個字串,即ip
操作為:
建立一個fd = socket,bind(20埠號),connect(客戶端的ip和port)
連線建立完畢後,需要給客戶端一個應答,成功給一個OK應答,如果是成功應答,還需要通多send_fd方法將該fd傳送給ftp服務程式
-// nobody程式對FTP服務程式的應答
#define PRIV_SOCK_RESULT_OK 1
如果是成功應答,還可能有進一步的資料傳輸,成功應答後,還要將fd傳遞給ftp服務程式(因為nobody程式會獲取資料socket,該socket要給ftp服務程式)
- eg:
miniftpd12\privsock.h
miniftpd12\privsock.c
miniftpd12\ftpproto.c
static void do_port(session_t *sess)需要改,目前還沒改
miniftpd12\main.c
signal(SIGCHLD, SIG_IGN);//避免殭屍程式
miniftpd12\privparent.c
// 解析內部命令
// 處理內部命令
static void privop_pasv_get_data_sock(session_t *sess)
static void privop_pasv_active(session_t *sess)
static void privop_pasv_listen(session_t *sess)
static void privop_pasv_accept(session_t *sess)
其他檔案變化不大
- 測試:
為什麼nobody程式跟著結束了?
首先客戶端斷開了連線,ftp服務程式readline返回為0,那麼ftp服務程式也就跟著結束了,一旦其關閉,那麼就會關閉相關的socketpair socket,那麼nobody程式就會處於priv_sock_get_cmd的狀態,一旦對方的socketpair socket關閉了,這邊priv_sock_get_cmd會返回0,表示對方關閉,那麼if (ret != sizeof(res))就會成立,所以nobody程式也會退出了
首先開啟一個client,接著關閉client
服務端的狀態
相關文章
- Electron實戰之程式間通訊
- Flink內部之間的通訊
- 內部伺服器之間介面通訊伺服器
- “Linux程式設計”小結(程式間通訊)Linux程式設計
- 在VC++ 6.0下利用訊息實現內部程式通訊 (轉)C++
- UNIX網路程式設計 卷2:程式間通訊程式設計
- Rust程式設計與專案實戰-結構體Rust程式設計結構體
- 實驗八 程式間通訊
- 管理 ES 叢集:叢集內部間的安全通訊
- iOS架構設計解耦的嘗試之模組間通訊iOS架構解耦
- Linux環境程式設計程式間通訊機制理解Linux程式設計
- LLinux系統程式設計(10)——程式間通訊之管道Linux程式設計
- Angular2-專案實戰(續)-與服務端通訊Angular服務端
- 程式間通訊
- 在Linux作業系統中實現內部程式通訊(轉)Linux作業系統
- Linux系統程式設計之程式間通訊方式:訊息佇列Linux程式設計佇列
- 內部通訊服務Factory(WCF)
- 通過 App Groups 實現程式間通訊APP
- iOS實現XMPP通訊(二)XMPP程式設計iOS程式設計
- Linux系統程式設計之程式間通訊方式:管道(二)Linux程式設計
- Linux系統程式設計之程式間通訊方式:管道(一)Linux程式設計
- linux環境程式設計(2): 使用pipe完成程式間通訊Linux程式設計
- Linux系統程式設計(11)——程式間通訊之有名管道Linux程式設計
- 從程式設計師到專案經理(12):如何管理自己的時間程式設計師
- 網路通訊程式設計程式設計
- iOS專案開發實戰——通過Http Get方式與伺服器通訊iOSHTTP伺服器
- iOS專案開發實戰——通過Http Post方式與伺服器通訊iOSHTTP伺服器
- Python專案實戰:20行程式設計迷宮大陣Python行程程式設計
- [MAUI 專案實戰] 筆記App(一):介紹與程式設計UI筆記APP程式設計
- 在 OpenResty 裡實現程式間通訊REST
- 實現不同程式之間的通訊
- 程式間通訊的另類實現
- 打造全網最全電商實戰專案系列教程[商品功能模組資料庫設計]資料庫
- PHP程式間通訊PHP
- 程式間的通訊
- 程式間通訊(Socket)
- 程式間通訊 --IPC
- windows程式間通訊Windows