1.實(shí)驗(yàn)系列
·Linux NAP-Linux網(wǎng)絡(luò)應(yīng)用編程系列
2.實(shí)驗(yàn)?zāi)康?/p>
·理解多進(jìn)程(Multiprocess)相關(guān)基本概念,理解父子進(jìn)程之間的關(guān)系與差異,熟練掌握基于fork()的多進(jìn)程編程模式;
·理解僵尸進(jìn)程產(chǎn)生原理,能基于|sigaction()或signal(),使用waitpid()規(guī)避僵尸進(jìn)程產(chǎn)生;
·理解Linux 文件系統(tǒng)的組織方式,掌握文件描述符的基本概念,理解主進(jìn)程 fork()進(jìn)程后,子進(jìn)程對(duì)于主進(jìn)程fork()前創(chuàng)建的文件描述符的繼承關(guān)系;
·在「TCP單進(jìn)程循環(huán)服務(wù)器與單進(jìn)程客戶端」的基礎(chǔ)上,進(jìn)一步實(shí)踐鞏固:a.單進(jìn)程循環(huán)服務(wù)器套接字編程基本模式;
b.服務(wù)器對(duì)于客戶端正常結(jié)束的識(shí)別處理;c.客戶端基于命令行指令的退出實(shí)現(xiàn)方式;
d.服務(wù)器基于SIGINT 信號(hào)的退出實(shí)現(xiàn)方式(僵速系統(tǒng)調(diào)用退出問(wèn)題);
同時(shí),還要進(jìn)一步理解并掌握TCP多進(jìn)程并發(fā)服務(wù)器套接字編程模式與技能,包括:a.多進(jìn)程并發(fā)服務(wù)器套接字編程核心系統(tǒng)調(diào)用模式:
b.多進(jìn)程并發(fā)服務(wù)器規(guī)避產(chǎn)生僵尸進(jìn)程的基本模式(包括 SIGCHLD 處理等);c.簡(jiǎn)單應(yīng)用層協(xié)議及其PDU的設(shè)計(jì)、構(gòu)建與解析處理;
d.文件的讀寫(xiě)應(yīng)用
3.實(shí)驗(yàn)內(nèi)容
·編寫(xiě)TCP多進(jìn)程循環(huán)服務(wù)器程序與單進(jìn)程客戶端程序,實(shí)現(xiàn)以下主體功能:??蛻舳藛?dòng)連接服務(wù)器之后,進(jìn)入命令行交互模式。
操作人員在命令行窗口輸入一行字符并回車(chē)后,客戶端進(jìn)程立刻從命令行(本質(zhì)即 stdin)讀取數(shù)據(jù),并將該行信息發(fā)送給服務(wù)器。
·服務(wù)器收到該行信息后,會(huì)將該信息原封不動(dòng)的返回給客戶端,即所謂消息回聲(Message Echo)。。客戶端收到服務(wù)器返回的消息回聲后,將其打印輸出至屏幕(本質(zhì)即 stdout)。
·客戶端在從命令行收到 EXIT 指令后退出。
·若服務(wù)器啟動(dòng)時(shí)設(shè)定 Established Queue的長(zhǎng)度,即listen()第二個(gè)參數(shù)backlog為2,則最多可 以有2個(gè)客戶編同時(shí)連上服務(wù)器并開(kāi)展交互,此時(shí),再啟動(dòng)另一個(gè)客戶端連接服務(wù)器,觀察體驗(yàn)是什么現(xiàn)象,并嘗試分析現(xiàn)象背后的底層邏輯。
·本實(shí)驗(yàn)不考核以下內(nèi)容:SIGPIPE 信號(hào)處理、基于多次讀取的PDU完整獲取、PDU 完整設(shè)計(jì)、多進(jìn)程客戶端.
·本實(shí)驗(yàn)不涉及復(fù)雜業(yè)務(wù),僅要求進(jìn)行PDU筒單設(shè)計(jì)(增加了頭部要求,但不涉及長(zhǎng)度字段),實(shí)現(xiàn)簡(jiǎn)單消息回聲服務(wù),以幫助學(xué)生理解并構(gòu)建多進(jìn)程并發(fā)服務(wù)器程序的基本框架。
·【重要假設(shè)】
·當(dāng)網(wǎng)絡(luò)與主機(jī)環(huán)境均比較理想時(shí),可以支持客戶端與服務(wù)器實(shí)現(xiàn)對(duì)于PDU的一次性收發(fā)」,即僅通過(guò) read()/write()的一次調(diào)用,即可實(shí)現(xiàn)PDU(本實(shí)驗(yàn)中即消息/消息回聲)的「完整收發(fā)」.
·本實(shí)驗(yàn)中,數(shù)據(jù)傳輸量很?。▽⒚鞔_限定一行數(shù)據(jù)的上限),且測(cè)評(píng)時(shí)客戶端與服務(wù)器進(jìn)程均在同一容器內(nèi)工作,故而不會(huì)出現(xiàn)一次收發(fā)不能處理「單—PDU」的場(chǎng)景。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-520150.html
服務(wù)器端代碼:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-520150.html
#include <stdio.h>
#include <stdlib.h> //exit()函數(shù)相關(guān)
#include <unistd.h> //C 和 C++ 程序設(shè)計(jì)語(yǔ)言中提供對(duì) POSIX 操作系統(tǒng) API 的訪問(wèn)功能的頭文件
#include <sys/types.h> //Unix/Linux系統(tǒng)的基本系統(tǒng)數(shù)據(jù)類(lèi)型的頭文件,含有size_t,time_t,pid_t等類(lèi)型
#include <sys/socket.h> //套接字基本函數(shù)相關(guān)
#include <netinet/in.h> //IP地址和端口相關(guān)定義,比如struct sockaddr_in等
#include <arpa/inet.h> //inet_pton()等函數(shù)相關(guān)
#include <string.h> //bzero()函數(shù)相關(guān)
#include <signal.h>
#include <errno.h>
#include <sys/wait.h> //SIGCHLD信號(hào)使用
#include <pthread.h>
#define BACKLOG 5 //listen函
到了這里,關(guān)于計(jì)算機(jī)網(wǎng)絡(luò)套接字編程實(shí)驗(yàn)-TCP多進(jìn)程并發(fā)服務(wù)器程序與單進(jìn)程客戶端程序(簡(jiǎn)單回聲)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!