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

正文內(nèi)容

基于linux的網(wǎng)絡聊天程序的開發(fā)-資料下載頁

2024-11-12 15:28本頁面

【導讀】個人或集體已經(jīng)發(fā)表或撰寫過的作品成果。對本文的研究做出重要。貢獻的個人和集體均已在文中以明確方式標明。本人完全意識到本。聲明的法律結(jié)果由本人承擔。實現(xiàn)局域網(wǎng)聊天功能。[3]Stevens[美].UNIX環(huán)境高級編程第二版[M].北京:人民郵電出版社,2020.[4]李勝利,龐麗萍.操作系統(tǒng)[M].武漢:華中科技大學出版社,2020.在對資料充分研究的基礎上,確定方案,進行硬件設計和編寫程序。對系統(tǒng)進行仿真調(diào)試,完成畢業(yè)論文的撰寫。完成論文修改并定稿,準備答辯。本任務書一式三份,由指導教師填寫,經(jīng)教研室審批后一份下達給學生,一份交指導教師,一份留系里存檔。于Windows操作系統(tǒng)的人來說Linux的操作不夠人性化、交互界面不夠美觀這給Linux操作系統(tǒng)的。運用,以達到檢驗學習成果的目的。完成這項設計所采取的主要措施有兩條:一是密切聯(lián)系。聯(lián)系本組設計成員及畢業(yè)設計指導導師,尋求有關(guān)畢業(yè)設計信息,確定設計課題方向與設計內(nèi)容;二是虛心學習。[9]嚴蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)[M].北京:清華大學出版社,2020.

  

【正文】 進程之間是一對一的聯(lián)系,即主機的一個進程與服務器的一個進程之間建立的連接。而每個進程進行通信的環(huán)節(jié)都包括了發(fā)送信息和接口信息兩個任務,這兩個任務通過一個端口地址發(fā)送和接收。 對于多個并發(fā)的任務需要創(chuàng)建多個線程或線程去實現(xiàn)。使用一個進程去完成發(fā)送信息是沒有問題的,因為發(fā)送總是主動的;而使用同一個進程再去完成接 10 受信息去不一定會成功 , 因為接受信息是被動的 , 所以當沒有信息可以接收時 ,該進程就 會被阻塞 , 從而導致發(fā)送任務也一起被阻塞。同一個端口的發(fā)送和接收是兩個并發(fā)任務,應該由兩個不同的任務去分別完成信息的發(fā)送和接收。這樣,當接收信息任務因沒有信息而被阻塞時,不至于影響發(fā)送任務的執(zhí)行。 那么,發(fā)送和接收兩個任務是使用兩個進程還是兩個進程去完成呢? 在網(wǎng)絡通信中,端口地址是以進程為單位進程分配的,而一個進程與外界的消息發(fā)送與接收必須通過分配給它的同一個端口進行。因此,不能通過創(chuàng)建進程方式來解決上訴問題,因為兩個進程會分別對應兩個不同的端口,而發(fā)送和接收必須使用同一端口。線程不是資源分配的單位,所以如 果使用兩個線程不會對線程分配新的端口。因此,本實驗需要使用兩個線程去分別完成發(fā)送和接收信息的任務,這兩個線程共享其進程擁有的統(tǒng)一個端口地址。由于創(chuàng)建進程的進程本身會作為一個線程來調(diào)度,所以只需要再創(chuàng)建一個線程專門負責接收信息就可以了。 因此,對于從每個客戶端發(fā)來的請求,服務器端都要創(chuàng)建相應的線程去接收并處理;同理,對于客戶端而言,也要創(chuàng)建一個線程去讀取服務器端發(fā)來的信息。 11 2 系統(tǒng)實現(xiàn) 界面實現(xiàn) 本程序是在 Linux 終端上運行,界面使用 vt 碼打印界面。 一、鎖 \開鍵盤代碼 代碼定義: 鎖鍵盤: ESC[2h 開鍵盤: ESC[2l 應用: ( 1) 直接在鍵盤上順序敲入 Esc+ [+ 2+ h 四鍵,鍵盤即被鎖住。 ( 2) 在 C 語言程序顯示字符串中包含鎖代碼: printf(″% c[2h 字串 ″,39。\03339。)。 ( 3) 在 shell 程序中用 echo 命令: echo″^[[2h字串 ″.注 Esc 鍵在 vim 編輯器中輸入方法為: Ctrl+ v,然后按一下 Esc 鍵,在屏幕上顯示 ^[表示已輸入。同樣 ,顯示開鎖代碼則鍵盤被解鎖。 二、刪除字符代碼 代碼定義: ESC[nX: 清除光標右邊 n 個字符,光標不動 ; ESC[K 或 ESC[OK: 清除光標右邊全部字符,光標不動 ; ESC[1K: 清除光標左邊全部字符,光標不動 ; ESC[2K: 清除整行,光標不動 ; ESC[J 或 ESC[OJ: 清除光標右下屏所有字符,光標不動 ; ESC[1J: 清除光標左上屏所有字符,光標不動 ; ESC[2J 或 ESCc: 清屏,光標移到左上角 ; ESC[nM: 刪除光標之下 n 行,剩下行往上移,光標不動 ; ESC[nP: 刪除光標右邊 n 個字符,剩下部分左移,光標不動 。 應用: 一般用于自己開發(fā)的編輯器中或涉及行編輯的應用程序中。 三、插入字符代碼 代碼定義 : ESC[n@: 在當前 光標處插入 n 個字符 ; ESC[nL: 在當前光標下插入 n 行。 應用: 一般用于自己開發(fā)的編輯器中或涉及行編輯的應用程序中。 12 四、移動光標 代碼定義: ESC[nA: 光標上移 n 行 ; ESC[nB: 光標下移 n 行 ; ESC[nC: 光標右移 n 個字符 ; ESC[nD: 光標左移 n 個字符 ; ESC[n。mH: 光標定位到第 n 行 m 列 (類似代碼 ESC[n。mf)。 應用: ( 1) 一般用于自己開發(fā)的編輯器中或涉及行編輯的應用程序中。 ( 2) 用 shell 編輯的菜單程序中定位光標,如: echo″^[[10。30H請選擇: [ ]^[[9C\c″, 則先把光標定位到 10 行 30 列,然后顯示 ″請選擇 [ ]″,最后光標右移 9 個符定位到中括號內(nèi)等待用戶響應。 五、定義字符顯示屬性代碼 代碼定義: ESC[p。p。p; ……m 其中屬性值 p 可以是一個或多個,具體定義如下: p 含義如表 所示: 表 p 的含義 應用: unix 系統(tǒng)提供的 setcolor 命令是以行為單位改變顏色,在實際運用中有它的局限性,上面提到的控制代碼在日常生活中用得最多,尤其適合于彩色彈出式立體菜單的設計。 0 清除所有屬性 1 高亮度顯示 4 下劃線 (如果硬件支持的話 ) 5 閃爍 (如果硬件支持的話 ) 7 反場 (前背景交換 ) 8 隱藏 (不顯示 ) 12 選擇第二替代字體;在作為 ROM 字符顯示之前先壓縮擴展高位 ASCII 碼 值 11 選擇第一替代字體;讓 ASCII 值小于 32的字符顯示時直接取自 ROM 芯片內(nèi) 10 選擇基本字體 30 前景黑色 25 無閃爍 27 無反場 31 前景紅色 32 前景綠色 33 前景褐色 34 前景藍色 35 前景紫色 36 前景藍綠色 37 前景白色 38 開啟下劃線標志;白色前景用白色下劃線 39 關(guān)閉下劃線標志 40 背景黑色 41 背景紅色 42 背景綠色 43 背景褐色 44 背景藍色 45 背景紫色 46 背景藍綠色 47 背景白色 13 六、其它代碼 代碼定義: ESC7:保存當前光標位置參數(shù)及字符屬性。 ESC8:恢復保存的光標位置參數(shù)及字符屬性。 \n :插入換行符 \t :插入一個 Tab 鍵。 \r :插入回車符。 ^G :插入響鈴符 (pc 嗽叭鳴叫一次 ),在 vim 中按 Ctrl+ g 即可輸入。 \c :用于 shell 程序中,不換行。 Linux 下的 有關(guān) Socket 系統(tǒng)調(diào)用 Socket() 作用: Socket 函數(shù)為客戶機或服務器創(chuàng)建一個 sokcet。 格式: int Socket(int family,int type,int protocol); 參數(shù)說明: Family:表示地址族,可以去 AF_UNLX 和 AF_INT。 其中, AF_UNLX 只能夠用于單一的 UNIX 系統(tǒng)進程間通信 ; AF_INT 是針對 Inter 的,因而可以允許在遠程主機之間通信,實驗中使用 AF_INT[9]。 Type : 網(wǎng) 絡 程 序所 采 用的 通信 協(xié) 議 , 可 以取 SOCK_STREAM 或SOCK_DGRAM。其中, SOCK_STREAM 表明使用的是 TCP 協(xié)議,這樣提供按順序的、可靠的、雙向、面向連接的比特流; SOCKE_DGRAM 表明使用的是UDP 協(xié)議,這樣只會提供定長、不可靠、無連接的通信。 bind( ) 格式: int bind(int sockfd,struct sockaddr *addr,int addrlen)。 參數(shù)說明: Sockfd: Socket 的文件描述符號。 Sockaddr:表示名字所用的一個數(shù)據(jù)結(jié)構(gòu),用來保存地址 (包括 IP 地址和端口 )。 Addrlen:設置結(jié)構(gòu)大小長度。 listen( ) 格 式 : int listen(int sockfd, int backlog); 作用:監(jiān)聽連接信號,和 accepted 函數(shù)合同。 14 參數(shù)說明: Sockfd:表示 Socket 調(diào)用返回的文件描述符。 Backlog:表示接入隊列允許的連接數(shù)目,大多數(shù)系統(tǒng)允許 20 個,也可以子定義 5~ 10 個。 accept( ) 格式: Int accept (int sockfd, void *addr, int *addrlen); 作用:與 listen 函數(shù)合用,監(jiān)聽信息、接收客戶端請求。 參數(shù)說明: Sockfd:表示 Socket 的文件描述符。 Addr:表示指向局部的數(shù)據(jù)結(jié)構(gòu) struct sockaddrin 的指針。 Addrlen:表示地址的長度。 connect( ) 格式: int connect( int sockfd , struct sockaddr *serv_addr , int addrlen)。 作用:在面向連接的系統(tǒng)中客戶及連接服務器時使用, connect 必須在 bind后使用。 參數(shù)作用: Sockfd:表示 Socket 的文件描述符。 Servaddr:表示村訪目的端口和 ip 地址(套接字)的數(shù)據(jù) 結(jié)構(gòu)。 send( ) 和 recv( ) 格式 1: Int send (int sockfd, const vod *msg,int len, int flags)。 功能:發(fā)送信息。 格式 2: Int recv (int sockfd , void *buf,int len, usigned int flags)。 作用:用于流式 Socket、數(shù)據(jù)報 Socket 內(nèi)部之間的通信。 close( ) 和 shutdown ( ) 格式: Close( int sockfd)或 Int shutdown(int sockfd , int how)。 參數(shù)說明: How 的值為下面一種: 0不允許繼續(xù)接收; 1不允許繼續(xù)發(fā)送; 15 2不允許繼續(xù)發(fā)送和接收。 有關(guān)線程的系統(tǒng)調(diào)用函數(shù) pthread_create( )、 pthread_join( )。 TCP/IP 的使用 監(jiān)聽連接 , 利用 Socket、 bind、 listen 建立連接,步驟是: 第一步, 用 Socket 函數(shù)初始化 Socket,創(chuàng)建新的 sockfd。 Sockfd = Socket(AF_INT, SOCK_STREAM,0)[10]; 此步驟涉及到 IP 地址及其處理過程。 參數(shù)說明: i_addr 函數(shù) INADDR_ANY,該函數(shù)把由小數(shù)點分開的十進制 IP 地址轉(zhuǎn)為 unsinged long 類型,而在實驗中所使用的為 INADDR_ANY,使用利用自已的 IP 地址自動填充。 第二步,利用 bind 函數(shù)綁定端口和 IP 地址。 =AF_INET; /*將地址族類型設定好 */ =htons(MYPORT; /* 將端口給其賦值 */ =INADDR_ANY; /*用連接地址自動填充 ip*/ Bind(sockfd,(stuct sockaddr*)amp。my_addr,sizeof(stuct sockaddr)); /*sockfd 是分配的 Socket 名字, myaddr 則便是分配好的端口與 IP,用 bind綁定 */ 第三步,利用 listen 監(jiān)聽請求。 首先,發(fā)送請求: ( 1)利用 gethostbyname 獲取主機信息。 ( 2)初始化 Socket 端口。 ( 3)利用 connect 函數(shù)將自己的 IP 地址等信息發(fā)送到主機, 等待主機調(diào)用accept 函數(shù)來接受請求。 然后,主機接收請求,進行數(shù)據(jù)通信。 ( 1)主機利用 accept 接收請求; ( 2)創(chuàng)建子進程,顯示歡迎信息; ( 3)接收返回信息,顯示連接成功,并推出連接; ( 4)關(guān)閉客戶端口 Socket; ( 5)關(guān)閉服務端 Socket,結(jié)束子線程。 TCP 通信實現(xiàn) 服務端 服務端主程序流程圖如圖 : 16 圖 服務端流程圖 程序運行建立 Socket 連接,綁定端口 bind,然后等待接收信息。判斷有無信息,然后判斷信息是登陸或者聊天信息。登陸信息進入登陸子程序,聊天信息進入聊天子程序,都不是釋放接收信息,然后回到等待是否有信息接收。按組合鍵 ctrl + c 退出程序。 服務端主程序: int main(int argc, char **argv) { int sock_fd。 int ret。 char *precv_buf。 client_t *pclient。 17 struct sockaddr_in cli_addr。 struct sockaddr_in serv_addr。 sock_fd = socket(AF_INET,SOCK_DGRAM,0)。//建立套接字 ERROR(sock_fd 0,socket())。 bzero(amp。serv_addr,sizeof(struct sockaddr_in))。//將 serv_addr 清零 = AF_INET。//協(xié)議族 = htons(SERV_PORT)。//端口 = htonl(INADDR_ANY)。//本機 IP ret = bind(sock_fd,(void *)amp。serv_addr, sizeof(struct sockaddr_in))。//綁定端口、 IP、協(xié)議族 ERROR(ret 0,bind)。 pclient = client_create
點擊復制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1