freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux網(wǎng)絡(luò)編程——實(shí)現(xiàn)一個(gè)局域網(wǎng)的電子郵件系統(tǒng)(存儲(chǔ)版)

  

【正文】 Network Programming W Richard Stevents Prentice Hall 1998 The C Programming Language Dennis Ritchie amp。 26 27 int ServerMain(int)。 37 int LoginSev(int )。 50 int sin_size。 61 } 62 printf(server:got connection from %s,i_ntoa())。 80 for (n=1。 77 char c,*ptr。 58 if (new_fd==1) { 59 perror(accept)。 45 46 int main() 47 { 48 int sockfd,new_fd。 34 35 int RegisterSev(int )。 24 time_t recvtime。 另外,經(jīng)過(guò)本次設(shè)計(jì),提高了自己對(duì)程序設(shè)計(jì)開(kāi)發(fā)系統(tǒng)的興趣,提高了對(duì) LINUX操作系統(tǒng)的興趣,為今后的學(xué)習(xí)方向,并行分布式處理軟件,提供了一個(gè)良好的開(kāi)端。 同時(shí)在編程過(guò)程中感到 C 語(yǔ)言的靈活功能強(qiáng)大,以及 LINUX 操作系統(tǒng)的發(fā)展前景。實(shí)際的郵件系統(tǒng)采用公用的協(xié)議,用的是小于 1024 的保留端口號(hào),如 SMTP 協(xié)議端口號(hào)為 25。至今沒(méi)有很好的解決方案。 待完善的功能以及實(shí)現(xiàn)設(shè)想: 由于時(shí)間有限,還有許多郵件系統(tǒng)本應(yīng)具備的功能沒(méi)有實(shí)現(xiàn),下面作一分析,并提出相應(yīng)的實(shí)現(xiàn)方案或設(shè)想。 圖三 為客戶端程序啟動(dòng)后的界面。 運(yùn)行狀況: 由于條件限制,沒(méi)有 LINUX 聯(lián)網(wǎng)環(huán)境,該 郵件系統(tǒng)在同一臺(tái)電腦上模擬實(shí)現(xiàn)。 int DelMail(int mail_no,char*Usr)。當(dāng)發(fā)送郵件的客戶將郵件發(fā)送至服務(wù)器,服務(wù)器根據(jù)收信者的用戶名將郵件保存到特定文件中,即收信者的郵件文件中,以待收信者登錄時(shí)可以讀取。 int getmsgfrmdb(char* Usr)。 收到連接請(qǐng)求 父進(jìn)程 子進(jìn)程 L R R D S E 開(kāi)始 創(chuàng)建套接字開(kāi)始傾聽(tīng) StartListening() 創(chuàng)建子進(jìn)程 fork() 注冊(cè)程序 RegisterSev() 結(jié)束 登錄程序 LoginSev() 郵件服務(wù)函數(shù) MailService() 讀郵件 ReadMailSev() 刪郵件 DelMailSev() 發(fā)郵件 SendMailSev() 結(jié)束 服務(wù)器主函數(shù) ServerMain() Linux 網(wǎng)絡(luò)編程 —— 實(shí)現(xiàn)一個(gè)局域網(wǎng)的電子郵件系統(tǒng) 圖 1 服務(wù)器程序流程圖 R L 注冊(cè)成功 登錄成功 R E D S 開(kāi)始 建立連接 ConnectToServer() 客戶端主函數(shù) ClientMain() 注冊(cè)子程序 RegisterCli() 登錄子程序 LoginCli() 結(jié)束 郵件服務(wù)客戶端函數(shù) MailClient() 讀郵件 ReadMailCli() 刪郵件 DelMailCli() 發(fā)郵件 SendMailCli() 結(jié)束 Linux 網(wǎng)絡(luò)編程 —— 實(shí)現(xiàn)一個(gè)局域網(wǎng)的電子郵件系統(tǒng) 圖 2 客戶端程序流程圖 1文件處理模塊接口函數(shù) 第 10 行和 11 行的兩個(gè)頭文件 和 包括了服務(wù)器郵件處理模塊和用戶信息管理模塊的函數(shù),在服務(wù)器程序中調(diào)用了以下六個(gè)接口函數(shù),分別說(shuō)明如下: int UsrStore(char*Usr,char*Pswd)。 /* 發(fā) 送 用 戶 密碼 ,554~568 行 */ int LoginCli(int sockfd)。 /*接收用戶密碼214~224 行 */ int LoginSev(int sockfd)。調(diào)用見(jiàn)第 64 行??蛻舳?main()函數(shù)代碼見(jiàn) 422~438 行。 OK為函數(shù)成功返回標(biāo)志。接受方用 READLINE 函數(shù)接受一行字符串包括了結(jié)尾的換行符,這樣會(huì)在一些地方造成錯(cuò)誤,如字符串形式的用戶名和密碼若加了換行符就變成Linux 網(wǎng)絡(luò)編程 —— 實(shí)現(xiàn)一個(gè)局域網(wǎng)的電子郵件系統(tǒng) 了另一個(gè)字符串了,雖然使用者感覺(jué)不到,但回在服務(wù)器程序驗(yàn)證密碼時(shí)返回錯(cuò)誤結(jié)果。為結(jié)束的一段字符串,包括換行符本身。發(fā)送成功函數(shù)返回 OK。類似與操作系統(tǒng)原理中的生產(chǎn)者消費(fèi)者問(wèn)題,當(dāng)生產(chǎn)者還沒(méi)有往緩沖中寫(xiě)數(shù)據(jù),消費(fèi)者就不能從緩沖區(qū)中讀數(shù)據(jù),否則取得的數(shù)據(jù)不是有效的數(shù)據(jù),或者導(dǎo)致讀文件失敗。文件處理模塊由 include 語(yǔ)句引用。根據(jù)命令行提示語(yǔ)句依次輸入收信者,主題,正文,按 Ctrl+D 結(jié)束編輯,郵件自動(dòng)發(fā)送。在以下四個(gè)場(chǎng)合需要調(diào)用服務(wù)器端的 read/write 或 send/revc 函數(shù)與客戶端通信: ( 1)服務(wù)器向客戶端發(fā)服務(wù)響應(yīng)信息(字符串形式) ( 2)服務(wù)器向客戶傳送郵件(服務(wù)器打開(kāi)郵件文件,傳輸文本,客戶接收文本寫(xiě)入本地新文件) ( 3)客戶端向服務(wù)器發(fā)服務(wù)請(qǐng)求(字符串形式) ( 4)客戶端向服務(wù)器傳送郵件(客戶打開(kāi)郵件文件,傳輸文本,服務(wù)器 接收文本寫(xiě)入本地新文件) 客戶端界面提供模塊 該模塊提供用戶使用郵件系統(tǒng)的界面。 ( 1)保存用戶密碼對(duì):在新用戶注冊(cè)時(shí),即用戶選擇“注冊(cè)”命令,并將用戶名和密碼傳到服務(wù)器時(shí)調(diào)用此功能,將新用戶的信息 —— 用戶密碼對(duì)添加到用戶信息文件中。 ( 1)打開(kāi)郵件列表:在用戶登 錄成功時(shí),即用戶輸入用戶名密碼得到正確驗(yàn)證時(shí)調(diào)用此功能。 下面對(duì)各模塊的功能和實(shí)現(xiàn)方案詳細(xì)解釋說(shuō)明如下: 服務(wù)器文件處理模塊: 包括兩個(gè)子模塊,信件管理模塊和用戶信息管理子模塊。 從服務(wù)器和客戶端的角度,它們分別需實(shí)現(xiàn)以下功能: 服務(wù)器: 保存用戶信息(帳號(hào)密碼對(duì)) 驗(yàn)證登錄用 戶密碼 郵件接受轉(zhuǎn)發(fā)功能(接受發(fā)信用戶發(fā)來(lái)的郵件,將郵件發(fā)給收信用戶) 郵件管理功能(保存,打開(kāi),刪除等) 客戶端: 選擇需要的服務(wù) 讀郵件,刪郵件,編輯郵件,發(fā)送郵件 另外,在以下四種場(chǎng)合,服務(wù)器和客戶端需共同完成通信的功能: 客戶端向服務(wù)器發(fā)送服務(wù)請(qǐng)求、密碼等信息 服務(wù)器向客戶端發(fā)送響應(yīng)信息(服務(wù)完成、密碼驗(yàn)證信息等) 客戶端向服務(wù)器傳送郵件 服務(wù)器向客戶端傳送郵件 服務(wù)器和客戶端分別需實(shí)現(xiàn)的功能可以采用 LINUX 系統(tǒng)提供的文件操作系統(tǒng)調(diào)用實(shí)現(xiàn)。 printf(......local socket closed\n)。servaddr,sizeof(struct sockaddr))。 } sockfd=socket(AF_INET,SOCK_STREAM,0)。 } while(waitpid(1,NULL,WNOHANG)0)。their_addr,amp。 exit(1)。 } else { printf(socket created successfully!\n)。下面給出一個(gè)對(duì)以上函數(shù)應(yīng)用的簡(jiǎn)單的例子:實(shí)現(xiàn)由服務(wù)器向客戶端發(fā)送一個(gè)字符串“ HELLO WORLD!”。 函數(shù) send()的功能和 write()相似,它在 write()的功能的基礎(chǔ)上,增加了 4 個(gè)參數(shù)用來(lái)對(duì)套接字的寫(xiě)操作進(jìn)行控制,函數(shù)形式如下: includesys/ includesys/ int send(int sockfd,void *buf,int len,int flags)。 參數(shù)是由 connect 返回(客戶進(jìn)程)或者 accept(服務(wù)器進(jìn)程)的 連接套接字描述符。如果程序?qū)蛻暨M(jìn)程的地址不感興趣,則可以將 addr 和 addrlen 設(shè)置為NULL。 Linux 網(wǎng)絡(luò)編程 —— 實(shí)現(xiàn)一個(gè)局域網(wǎng)的電子郵件系統(tǒng) 參數(shù) sockfd 是在 bind 之后已經(jīng)命名的套接字, backlog 指定連接請(qǐng)求隊(duì)列的最大長(zhǎng)度。 ret=(bind(sock_fd,(struct sockaddr*)amp。 my_addr 是一個(gè)指向 struct sockaddr 的指針,包含有關(guān)的地址信息:名稱、端口和 IP 地址。 if (ret0) { perror(connect to server error)。 =AF_INET。 unsigned short int ntohs(unsigned short int short)。 *網(wǎng)絡(luò)字序及其相關(guān)函數(shù)族 由于不同 計(jì)算機(jī)內(nèi)部對(duì)變量的字節(jié)存放的順序可能不同。 /*14 字節(jié)的協(xié)議地址 */ }; 其中, sa_family 為套接字的協(xié)議簇地址類型,比如 TCP/IP 協(xié)議簇的地址類型為 AF_INET;參數(shù) sa_data 中存儲(chǔ)具體的地址內(nèi)容。 } Linux 網(wǎng)絡(luò)編程 —— 實(shí)現(xiàn)一個(gè)局域網(wǎng)的電子郵件系統(tǒng) 如果 socket 調(diào)用失敗,將返回 1,并將設(shè)置 errno,以標(biāo)識(shí)錯(cuò)誤原因。 read 和 write 系統(tǒng)調(diào)用和對(duì)文件的讀寫(xiě)相似。 Client 端通過(guò) socket 調(diào)用創(chuàng)建一個(gè)一定 類型 socket(應(yīng)當(dāng) Server 的 socket 類型相同 )。流式套接字可以提供可靠的、面向連接的通信流。一個(gè)套接字可以這樣來(lái)解釋:它是通過(guò)標(biāo)準(zhǔn)的 UNIX 文件描 述符和其他程序通信的一個(gè)方法。進(jìn)程通信之前,雙方首先必須各自創(chuàng)建一個(gè)端點(diǎn),否則沒(méi)有辦法建立聯(lián)系并相互通信的。 Linux 目前已經(jīng)進(jìn)入了許多主流公司的事業(yè),電信、金融、政府、軍事等領(lǐng)域也廣泛采用它。 1969~1970 年間,美國(guó)電報(bào)電話公司 (ATamp。本次畢業(yè)設(shè)計(jì)的任務(wù)為分析 LINUX 網(wǎng)絡(luò)編程環(huán)境,并實(shí)現(xiàn)一個(gè) LINUX 局域網(wǎng)的電子郵件系統(tǒng)。詳細(xì)分析了編程中將用到的 BSD 套接字函數(shù)族的使用。由于 UNIX 的一下特征:開(kāi)放性、多用戶多任務(wù)環(huán)境、功能強(qiáng)大、效率高、提供豐富的網(wǎng)絡(luò)功能等, UNIX 操作系統(tǒng)取得了巨大的成功,廣泛應(yīng)用于金融、軍事等社會(huì)各領(lǐng)域??梢?jiàn) LINUX在網(wǎng)絡(luò) 和分布式系統(tǒng)的應(yīng)用將是很有前景的。這與套接字機(jī)制非常相似。進(jìn)行諸如創(chuàng)建、讀、寫(xiě)、刪除等操作,從而實(shí)現(xiàn)網(wǎng)絡(luò)通信。原始套接字允許對(duì)底層協(xié)議如 IP 和 ICMP 直接訪問(wèn),主要用于新的網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)的測(cè)試等。 Client 端收到回應(yīng)后,又向 Server 發(fā)回應(yīng)信號(hào),并從 connect函數(shù)返回,返回值是一個(gè)打開(kāi)的 socket 描述符。 參數(shù) domain 用于指定要?jiǎng)?chuàng)建的套接字使用的協(xié)議簇 , 可設(shè)置為AF_INET(TCP/IP 協(xié)議簇 ),AF_UNIX(UNIX 域協(xié)議簇 )或 AF_ISO(ISO 協(xié)議簇 ).參數(shù) type 指定套接字的類型 ,可以為 SOCK_STREAM(流套接字) ,SOCK_DGRAM(數(shù)據(jù)報(bào)套接字) ,SOCK_RAW(原始套接字)。 參數(shù) sockfd 是在 socket()函數(shù)中返回的套接字描述符。 struct sockaddr_in { short int sin_family。為了消除這種差異,協(xié)議規(guī)定在 Inter 上使用的網(wǎng)絡(luò)字節(jié)順序采用順序存放。 ntohs 和 ntohl 的功能和 htons、 ht
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1