版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 通信與信息工程學(xué)院</b></p><p><b> 嵌入式開發(fā)技術(shù)</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p><b> 通信與信息工程學(xué)院</b></p><p><b> 二
2、〇一六年</b></p><p><b> 目 錄</b></p><p><b> 嵌入式課程設(shè)計(jì)1</b></p><p><b> 1 設(shè)計(jì)要求1</b></p><p> 1.1 基本題型1</p><p> 1.2
3、 綜合題型2</p><p> 2 開發(fā)環(huán)境、開發(fā)工具2</p><p> 3設(shè)計(jì)過程及結(jié)果5</p><p> 3.1 實(shí)現(xiàn)交叉編譯環(huán)境5</p><p> 3.2第幾小組成員步驟5</p><p> 3.3實(shí)現(xiàn)Linux系統(tǒng)下的簡易聊天室7</p><p><b&
4、gt; 4 設(shè)計(jì)總結(jié)20</b></p><p><b> 參考文獻(xiàn)22</b></p><p><b> 嵌入式課程設(shè)計(jì)</b></p><p><b> 1 設(shè)計(jì)要求</b></p><p><b> 1.1 基本題型</b>
5、</p><p> ?。?)嵌入式開發(fā)環(huán)境配置</p><p> ①采用vmware+linux配置開發(fā)主機(jī)系統(tǒng),要求構(gòu)建linux系統(tǒng),配置nfs,samba;</p><p> ?、谡莆誱inicom、samba及NFS使用,能利用其實(shí)現(xiàn)windows、linux開發(fā)主機(jī)與嵌入式實(shí)驗(yàn)系統(tǒng)間的通信;</p><p> ?、劾肗FS服務(wù)實(shí)
6、現(xiàn)主機(jī)與實(shí)驗(yàn)系統(tǒng)間文件共享;</p><p> ?、芾锰峁┑墓ぞ邩?gòu)建交叉編譯環(huán)境;</p><p> 要求:在下圖時(shí)間上面一行顯示小組成員姓名</p><p> Armv4l-unknown-linux-gcc 是 否 在/opt/host/armv4l/bin/,如果不是這個(gè)路徑,請(qǐng)使用 vi 修改/root/.bash_profile 文件中 。ATH變
7、量 為 PATH=$PATH:$HOME/bin:/opt/host/armv4l/bin/ , 存 盤 后 執(zhí) 行 : source /root/.bash_profile</p><p> ?。?)熟悉VI、GCC、GDB及MAKE文件使用;</p><p> ?。?)在開發(fā)系統(tǒng)中編寫一個(gè)程序,實(shí)現(xiàn)打印“通信工程13級(jí)第3小組嵌入式開發(fā)技術(shù)課程設(shè)計(jì)基礎(chǔ)內(nèi)容”功能,編寫makefile
8、文件,并通過NFS下載到實(shí)驗(yàn)箱中,驗(yàn)證交叉編譯環(huán)境配置。</p><p><b> 1.2 綜合題型</b></p><p> 基于socket編程的簡單聊天室程序設(shè)計(jì):</p><p> ?。?)掌握linux下socket編程方法;</p><p> ?。?)基于C語言設(shè)計(jì)一個(gè)簡單的聊天室程序,PC運(yùn)行客戶端程序
9、,嵌入式系統(tǒng)運(yùn)行服務(wù)器端程序,服務(wù)器隨時(shí)偵聽客戶端請(qǐng)求并將其接入,要求至少實(shí)現(xiàn)2個(gè)客戶端接入服務(wù)器并進(jìn)行通信的功能;</p><p> (3)編寫Makefile文件;</p><p> (4)利用NFS將程序下載到實(shí)驗(yàn)箱中,編譯執(zhí)行。</p><p> ?。?)課程設(shè)計(jì)報(bào)告中應(yīng)包含服務(wù)器端socket創(chuàng)建、綁定、監(jiān)聽、允許接入及接收數(shù)據(jù)等關(guān)鍵代碼及其說明,客戶
10、端請(qǐng)求及數(shù)據(jù)發(fā)送等關(guān)鍵代碼及說明;</p><p> 2 開發(fā)環(huán)境、開發(fā)工具</p><p> ?。?)安裝VWware軟件</p><p> ?、匍_始安裝加載文件.雙擊該文件的圖標(biāo),進(jìn)入加載安裝文件的界面。</p><p> ?、谠O(shè)置安裝類型。安裝文件加載完畢后進(jìn)入開始安裝界面。單擊next按鈕后,進(jìn)入安裝類型選擇界面,選擇tyical選
11、項(xiàng)。</p><p> ?、蹐?zhí)行軟件包的安裝選項(xiàng),依據(jù)所做的選擇,把對(duì)應(yīng)的軟件組件安裝到系統(tǒng)中,輸入正確的序列號(hào)。</p><p> ?。?)配置VMware</p><p> ①打開桌面上VMware圖形,雙擊打開</p><p> ?、谠俅蜷_原來的文件夾,把漢化包打開</p><p> ?、蹐?zhí)行軟件的安裝選項(xiàng),依
12、據(jù)所做的選擇,確認(rèn)安裝。確認(rèn)完后,即配置完成。</p><p> ④點(diǎn)擊打開虛擬機(jī),選擇標(biāo)準(zhǔn),下一步,執(zhí)行軟件的安裝選項(xiàng)。接下是密鑰,填寫老師所給的密碼。安裝完成。</p><p><b> ?。?)安裝驅(qū)動(dòng)</b></p><p> 點(diǎn)擊安裝包,根據(jù)軟件的安裝選項(xiàng),點(diǎn)擊next按鈕,即可安裝完成。</p><p>
13、 注:在電腦上安裝好虛擬機(jī)之后配置相關(guān)參數(shù) </p><p> ?、倥渲肗FS:點(diǎn)擊菜單運(yùn)行系統(tǒng)設(shè)置->點(diǎn)擊服務(wù)器設(shè)置->NFS服務(wù)器,點(diǎn)擊增加,在目錄中選擇共享目錄的路徑,在主機(jī)(host)中填入主機(jī)IP地址(192.168.1.12),并選擇客戶對(duì)共享目錄的操作位讀寫(Read/write);在常規(guī)選項(xiàng)中選擇允許來自高于1024的端口的連接,點(diǎn)擊確定后即可配置好NFS。配置完成后,可以簡單測試一
14、下NFS是否配置好了: 在虛擬機(jī)上自己 mount 自己,看是否成功就可以判斷NFS是否配好了。</p><p> mount 192.168.1.12:/arm2410cl /host</p><p> 之后ls命令查看arm2410cl之下的文件目錄,如果文件目錄在,那么說明NFS配置成功。</p><p><b> ?、诙丝谂渲?lt;/b>
15、;</p><p> 用串口線連接好筆記本電腦和 2410 經(jīng)典版平臺(tái)。 </p><p> 計(jì)算機(jī),屬性,設(shè)備管理器,端口</p><p> 高級(jí)設(shè)置下端口號(hào)COM1</p><p> 進(jìn)入虛擬機(jī)設(shè)置,串行端口</p><p><b> 3設(shè)計(jì)過程及結(jié)果</b></p>
16、<p> 3.1 實(shí)現(xiàn)交叉編譯環(huán)境</p><p><b> 結(jié)果:</b></p><p> 3.2第幾小組成員步驟</p><p><b> ?。?)創(chuàng)建工作目錄</b></p><p> 【root@vm-dev~】# mkdir winter</p><
17、p> 【root@vm-dev winter】# cd winter</p><p> (2)編寫winter.c文件</p><p> 【root@vm-dev~】# vi winter.c</p><p> ?。?)編寫Makefile文件</p><p> CC =armv4l-unknown-linux-gcc<
18、/p><p> EXEC=client server</p><p> OBJS=client.o server.o</p><p><b> CFLAGS+=</b></p><p> LDFLAGS+=-static</p><p> all:$(EXEC)</p><
19、;p> $(EXEC):$(OBJS)</p><p> $(CC) $(LDFLAGS) –o $@ $(OBJS)</p><p><b> clean:</b></p><p> -rm –f *.elf *.gdb *.o </p><p><b> 其中,</b><
20、;/p><p><b> CC 指明編譯器</b></p><p> EXEC 表示編譯后生成的執(zhí)行文件名稱</p><p> OBJS 目標(biāo)文件列表</p><p> CFLAGS 編譯參數(shù)</p><p> LDFLAGS 連接參數(shù)</p><p> all:
21、編譯主入口</p><p> clean: 清除編譯結(jié)果</p><p> ?。?)運(yùn)行make編譯程序</p><p> 【root@vm-dev~】# make clean</p><p> 【root@vm-dev winter】# make</p><p><b> ?。?)源程序 </b
22、></p><p> #include<stdio.h></p><p> int main(void)</p><p><b> {</b></p><p> printf(“ 通信工程13級(jí)第三小組嵌入式開發(fā)技術(shù)課程設(shè)計(jì)基礎(chǔ)內(nèi)容“);</p><p><b>
23、; }</b></p><p><b> 6)結(jié)果</b></p><p> 由于電腦與開發(fā)板不匹配,結(jié)果沒有辦法出來</p><p> 3.3實(shí)現(xiàn)Linux系統(tǒng)下的簡易聊天室</p><p><b> ?。?)程序流程圖</b></p><p><
24、b> ?。?)程序工作過程</b></p><p> 服務(wù)端處于監(jiān)聽狀態(tài),客戶端發(fā)送請(qǐng)求,連接成功并通信。首先服務(wù)端調(diào)用socket()函數(shù)創(chuàng)建一個(gè)套接字,然后把協(xié)議,端口號(hào),ip信息通過bind()進(jìn)行綁定。以上操作完后服務(wù)端就開始監(jiān)聽客戶端的請(qǐng)求,并設(shè)置監(jiān)聽的最大數(shù)目。當(dāng)客戶端發(fā)送鏈接請(qǐng)求時(shí),服務(wù)端就調(diào)用accept()函數(shù)接受客戶端的請(qǐng)求。然后對(duì)于客戶端來說,也是要先調(diào)用socket()
25、函數(shù)創(chuàng)建客戶端的套接字,這里是用的TCP協(xié)議,所以可以不用bind()函數(shù)。接著調(diào)用connect()函數(shù)與服務(wù)端建立連接。當(dāng)服務(wù)端和客戶端建立連接時(shí),可以通過彼此之間的套接字描述符來進(jìn)行數(shù)據(jù)傳輸。其中一方通過send函數(shù)把數(shù)據(jù)寫入數(shù)據(jù)緩沖區(qū),另一方通過recv()函數(shù)從緩沖區(qū)內(nèi)讀出數(shù)據(jù),這樣就完成了服務(wù)端與客戶端之間的數(shù)據(jù)傳輸。當(dāng)雙方數(shù)據(jù)傳輸完成后,函數(shù)close()關(guān)閉各自的 套接字,使客戶端和服務(wù)端通信中斷。</p>
26、<p> (3)socket編程方案</p><p> ?、僭O(shè)計(jì)一個(gè)簡單的聊天室程序,PC運(yùn)行客戶端程序,嵌入式系統(tǒng)運(yùn)行服務(wù)器端程序,服務(wù)器隨時(shí)偵聽客戶端請(qǐng)求并將其接入,要求至少實(shí)現(xiàn)2個(gè)客戶端接入服務(wù)器并進(jìn)行通信的功能;</p><p> ②Makefile文件</p><p> ?、跱FS將程序下載到實(shí)驗(yàn)箱中,編譯執(zhí)行。</p>&l
27、t;p> 注:程序里的函數(shù)解釋</p><p> ?。?)Socket()</p><p> 作用:socket函數(shù)為客戶機(jī)或服務(wù)器創(chuàng)建一個(gè)sokcet</p><p><b> 格式:</b></p><p> int socket(int family,int type,int protocol);&l
28、t;/p><p><b> 參數(shù)說明:</b></p><p> Family:表示地址族,可以去AF_UNLX和AF_INT。</p><p> 其中,AF_UNLX只能夠用于單一的UNIX系統(tǒng)進(jìn)程間通信;AF_INT是針對(duì)Internet的,因而可以允許在遠(yuǎn)程主機(jī)之間通信,實(shí)驗(yàn)中使用AF_INT。</p><p>
29、 Type:網(wǎng)絡(luò)程序所采用的通信協(xié)議,可以取SOCK_STREAM或SOCK_DGRAM。其中,SOCK_STREAM表明使用的是TCP協(xié)議,這樣提供按順序的、可靠的、雙向、面向連接的比特流;SOCKE_DGRAM表明使用的是UDP協(xié)議,這樣只會(huì)提供定長、不可靠、無連接的通信。</p><p> ?。?)bind( )</p><p><b> 格式:</b>&l
30、t;/p><p> int bind(int sockfd,struct sockaddr *addr,int addrlen);</p><p><b> 參數(shù)說明:</b></p><p> Sockfd:socket的文件描述符號(hào)。</p><p> Sockaddr:表示名字所用的一個(gè)數(shù)據(jù)結(jié)構(gòu),用來保存地址(
31、包括IP地址和端口)</p><p> Addrlen:設(shè)置結(jié)構(gòu)大小長度。</p><p> ?。?)listen()</p><p><b> 格式:</b></p><p> int listen(int sockfd, int backlog);</p><p> 作用:監(jiān)聽連接信號(hào)
32、,和accepted函數(shù)合同。</p><p><b> 參數(shù)說明:</b></p><p> Sockfd:表示socket調(diào)用返回的文件描述符。</p><p> Backlog:表示接入隊(duì)列允許的連接數(shù)目,大多數(shù)系統(tǒng)允許20個(gè),也可以子定義5~10個(gè)。</p><p> ?。?)accept()</p&
33、gt;<p><b> 格式:</b></p><p> Int accept (int sockfd, void *addr, int *addrlen);</p><p> 作用:與listen函數(shù)合用,監(jiān)聽信息、接收客戶端請(qǐng)求。</p><p><b> 參數(shù)說明:</b></p>
34、<p> Sockfd:表示socket的文件描述符。</p><p> Addr:表示指向局部的數(shù)據(jù)結(jié)構(gòu)struct sockaddr-in的指針。</p><p> Addrlen:表示地址的長度。</p><p> ?。?)connect()</p><p><b> 格式:</b></p
35、><p> int connect( int sockfd , struct sockaddr *serv_addr , int addrlen);</p><p> 作用:在面向連接的系統(tǒng)中客戶及連接服務(wù)器時(shí)使用,connect必須在bind后使用。</p><p><b> 參數(shù)作用: </b></p><p>
36、 Sockfd:表示socket的文件描述符。</p><p> Serv-addr:表示村訪目的端口和ip地址(套接字)的數(shù)據(jù)結(jié)構(gòu)。</p><p> ?。?)send() 和 recv()</p><p><b> 格式1:</b></p><p> Int send (int sockfd, const vo
37、d *msg,int len, int flags);</p><p><b> 功能:發(fā)送信息。</b></p><p><b> 格式2:</b></p><p> Int recv (int sockfd , void *buf,int len, usigned int flags);</p>&
38、lt;p> 作用:用于流式socket、數(shù)據(jù)報(bào)socket內(nèi)部之間的通信。</p><p> (7)close( ) 和 shutdown ( )</p><p><b> 格式:</b></p><p> Close( int sockfd)</p><p><b> 或 </b>
39、</p><p> Int shutdown(int sockfd , int f);</p><p><b> 參數(shù)說明:</b></p><p><b> f的值為下面一種:</b></p><p> 0----不允許繼續(xù)接收;</p><p> 1----不允
40、許繼續(xù)發(fā)送;</p><p> 2---不允許繼續(xù)發(fā)送和接收。</p><p> ?。?)有關(guān)線程的系統(tǒng)調(diào)用函數(shù)pthread_create()、pthread_join()</p><p> 實(shí)驗(yàn)過程說明(使用TCP/IP)</p><p><b> (1)監(jiān)聽連接</b></p><p>
41、; 利用socket、bind、listen建立連接,步驟是:</p><p> 先用socket函數(shù)初始化socket,創(chuàng)建新的sockfd。</p><p> Sockfd = socket(AF_INT,SOCK_STREAM,0)</p><p> 此步驟涉及到IP地址及其處理過程。</p><p><b> 參數(shù)
42、說明:</b></p><p> inet_addr 函數(shù) INADDR_ANY</p><p> 該函數(shù)把由小數(shù)點(diǎn)分開的十進(jìn)制IP地址轉(zhuǎn)為unsinged long 類型,而在實(shí)驗(yàn)中所使用的為INADDR_ANY,使用利用自已的IP地址自動(dòng)填充。</p><p> a)利用bind函數(shù)綁定端口和IP地址。</p><p>
43、 My_addr.sin_family=AF_INET; /*將地址族類型設(shè)定好 */</p><p> My_addr.sin_port=htons(MYPORT; /* 將端口給其賦值*/</p><p> My_addr.sin_addr.s_addr=INADDR_ANY; /*用連接地址自動(dòng)填充ip*/</p><p>
44、 Bind(sockfd,(stuct sockaddr*)&my_addr,sizeof(stuct sockaddr));</p><p> /*sockfd 是分配的socket名字,my-addr則便是分配好的端口與IP,用bind綁定*/</p><p> b)利用listen監(jiān)聽請(qǐng)求</p><p><b> (2)發(fā)送請(qǐng)求&l
45、t;/b></p><p> 1)利用gethostbyname獲取主機(jī)信息。</p><p> 2)初始化socket端口。</p><p> 3)利用connect函數(shù)將自己的IP地址等信息發(fā)送到主機(jī),等待主機(jī)調(diào)用accept函數(shù)來接受請(qǐng)求。</p><p> (3)主機(jī)接收請(qǐng)求,進(jìn)行數(shù)據(jù)通信</p><
46、p> 1)主機(jī)利用accept接收請(qǐng)求。</p><p> 2)創(chuàng)建子進(jìn)程,顯示歡迎信息;</p><p> 3)接收返回信息,顯示連接成功,并推出連接;</p><p> 4)關(guān)閉客戶端口socket;</p><p> 5)關(guān)閉服務(wù)端socket,結(jié)束子線程。</p><p><b>
47、(4)實(shí)現(xiàn)步驟</b></p><p><b> ?、俳⒐ぷ髂夸?lt;/b></p><p> 【root@vm-dev~】# mkdir server</p><p> 【root@vm-dev server】# cd server</p><p> 【root@vm-dev server】# vi s
48、erver.c</p><p> 【root@vm-dev~】# mkdir client</p><p> 【root@vm-dev client】# cd client</p><p> 【root@vm-dev client】# vi client.c</p><p><b> ?、诰帉懗绦蛟创a</b>&l
49、t;/p><p><b> 程序附后</b></p><p><b> ?、劬幾g實(shí)現(xiàn)過程</b></p><p> ?、?在編寫完TCP服務(wù)端程序server.c后,用 armv4l-unknown-</p><p> linux-gcc –lpthread –o server.c server 生
50、成程序server。</p><p> ?、?在編寫完TCP客戶端程序client.c后,用armv4l-unknown-linux-gcc –o client.c client 生成程序client</p><p> ?、?在嵌入式系統(tǒng)上運(yùn)行server。</p><p> 在主機(jī)上打開一個(gè)窗口,運(yùn)行client,輸入服務(wù)器的IP地址,并檢查器結(jié)果的正確性。&l
51、t;/p><p><b> ?、?輸入:</b></p><p> # ./server</p><p> # ./client 192.168.1.12(192.168.1.12為本機(jī)的ip地址) </p><p><b> ?、?輸出:</b></p><p>
52、 #server:got connection from 192.168.1.12</p><p> ?、?客戶端發(fā)送信息服務(wù)器端接收信息。</p><p> 客戶端通過鍵盤輸入消息內(nèi)容平回車,以發(fā)送消息給服務(wù)器端;</p><p><b> ?、?結(jié)果:</b></p><p><b> 服務(wù)端:&l
53、t;/b></p><p><b> 客戶端:</b></p><p><b> 注 :源程序</b></p><p> client.c程序:</p><p> #include<stdlib.h></p><p> #include<sy
54、s/types.h></p><p> #include<sys/socket.h></p><p> #include<netinet/in.h></p><p> #include<arpa/inet.h></p><p> #include<unistd.h></p&g
55、t;<p> #include<stdio.h></p><p> #include<errno.h></p><p> #include<string.h></p><p> #define EHCO_PORT 8888 //端口號(hào)</p><p> #de
56、fine MAX_COMMAND 5 //最大發(fā)送消息的次數(shù)</p><p> int main()</p><p><b> {</b></p><p> int sock_fd;</p><p> struct sockaddr_in s_addr;</p><p>
57、char buff[100]; //緩沖區(qū)的大小</p><p> char tmp_buf[100];</p><p><b> int n,i;</b></p><p> sock_fd=socket(AF_INET,SOCK_STREAM,0); //創(chuàng)建socket套接字,協(xié)議為IPV4協(xié)議,并且為字節(jié)流套接
58、字</p><p> if(sock_fd==-1)</p><p><b> {</b></p><p> perror("create socket fail!");</p><p><b> return 0;</b></p><p><
59、;b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> printf("create socket %d\n",sock_fd);</p><p><b> }</b>
60、;</p><p> /*設(shè)置server 地址結(jié)構(gòu)*/</p><p> bzero(&s_addr,sizeof(s_addr)); //初始化結(jié)構(gòu)占用的內(nèi)存</p><p> s_addr.sin_family=AF_INET; //IPV4協(xié)議</p><p&g
61、t; s_addr.sin_port=htons(EHCO_PORT); //設(shè)置監(jiān)聽的端口</p><p> s_addr.sin_addr.s_addr=inet_addr("192.168.0.121"); //設(shè)置服務(wù)器的地址</p><p> bzero(&(s_addr.sin_zero),8);</p>&
62、lt;p> if(-1==connect(sock_fd,(struct sockaddr*)&s_addr,sizeof(s_addr)))</p><p><b> {</b></p><p> perror("connect() fail!\n");</p><p> close(sock_fd)
63、;</p><p><b> return 0;</b></p><p><b> }</b></p><p> printf("connect to server ok !\n");</p><p> for(i=0;i<MAX_COMMAND;i++)</
64、p><p><b> {</b></p><p> printf("請(qǐng)輸入要發(fā)送信息:\n");</p><p> scanf("%s",buff);</p><p> printf("發(fā)送信息:%s\n",buff);</p><p&g
65、t; send(sock_fd,buff,100,0); //發(fā)送數(shù)據(jù)給服務(wù)器</p><p> n=recv(sock_fd,tmp_buf,100,0); //從服務(wù)器接收數(shù)據(jù)</p><p> tmp_buf[n]='\0'; // 給字符串添加結(jié)束標(biāo)志</p><p> printf(&quo
66、t;接收的數(shù)據(jù): %s\n",tmp_buf); //打印接收的字符串</p><p> if(0==strncmp(tmp_buf,"quit",4)) //判斷是否退出命令</p><p><b> break;</b></p><p><b> }</b>&l
67、t;/p><p> close(sock_fd); //關(guān)閉套接字</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> Server.c:&l
68、t;/b></p><p> #include<stdlib.h></p><p> #include<sys/types.h> </p><p> #include<sys/socket.h></p><p> #include<netinet/in.h></p>
69、;<p> #include<arpa/inet.h></p><p> #include<unistd.h></p><p> #include<stdio.h></p><p> #include<errno.h></p><p> #include<strin
70、g.h></p><p> #define EHCO_PORT 8888 //定義端口號(hào)</p><p> #define MAX_CLIENT_NUM 5 //最大監(jiān)聽客戶端數(shù)</p><p> int main()</p><p><b> {</b></p
71、><p> int sock_fd;</p><p> struct sockaddr_in s_addr; </p><p> int clientfd;</p><p> struct sockaddr_in clientAdd;</p><p> char buff[101];
72、 //設(shè)置緩沖區(qū)的大小</p><p> socklen_t len;</p><p><b> int n;</b></p><p> /*創(chuàng)建socket*/</p><p> sock_fd=socket(AF_INET,SOCK_STREAM,0);//協(xié)議設(shè)置為IPV4協(xié)議,并設(shè)置為字節(jié)流套接字&
73、lt;/p><p> if(sock_fd==-1){</p><p> perror("create socket fail!");</p><p><b> return 0;</b></p><p><b> }else{</b></p><p>
74、; printf(" create socket ok %d\n",sock_fd);</p><p><b> }</b></p><p> bzero(&s_addr,sizeof(s_addr)); //初始化結(jié)構(gòu)體占用的內(nèi)存</p><p> s_addr.sin_family=AF_INET;
75、 //客戶端協(xié)議為IPV4</p><p> s_addr.sin_port=htons(EHCO_PORT); //把16位值的端口號(hào)從主機(jī)字節(jié)轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)</p><p> s_addr.sin_addr.s_addr=inet_addr("192.168.0.121"); //設(shè)置服務(wù)器地址</p><p>
76、; bzero(&(s_addr.sin_zero),8);//將內(nèi)存塊的前8個(gè)字節(jié)清零</p><p> if(bind(sock_fd,(struct sockaddr*)&s_addr,sizeof(s_addr))!=0)</p><p> {//將服務(wù)器地址和套接字綁定</p><p> printf("bind fail
77、! %d\n",errno);</p><p> close(sock_fd);</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> else</b></p><p>&
78、lt;b> {</b></p><p> printf(" bind ok!\n");</p><p><b> }</b></p><p> if(-1==listen(sock_fd,MAX_CLIENT_NUM))</p><p> { //設(shè)置套接字監(jiān)聽</p
79、><p> perror("listen fail!\n");</p><p> close(sock_fd);</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> else
80、</b></p><p><b> {</b></p><p> printf("listen ok\n");</p><p><b> }</b></p><p> len=sizeof(clientAdd); </p>&l
81、t;p> clientfd=accept(sock_fd,(struct sockaddr*)&clientAdd,&len); //創(chuàng)建新連接對(duì)應(yīng)的套接字</p><p> if(clientfd<=0)</p><p><b> {</b></p><p> perror("accept() f
82、ail!\n");</p><p> close(sock_fd);</p><p><b> return 0;</b></p><p><b> }</b></p><p> printf("client connect ok:\n");</p>
83、<p> while((n=recv(clientfd,buff,100,0))>0)</p><p><b> {</b></p><p> buff[n]='\0'; //給字符串加入結(jié)束符</p><p> printf("the data of receive
84、: %s\n",buff);//打印字符串的內(nèi)容</p><p> fflush(stdout); //清除文件緩沖區(qū)</p><p> printf("put the data of send:\n"); </p><p> scanf("%s",buff);<
85、;/p><p> send(clientfd,buff,n,0); //發(fā)送內(nèi)容給客戶端</p><p> printf("the message of send:%s\n",buff);</p><p> if(strncmp(buff,"quit",4)==0) //判斷是否退出命令</p&
86、gt;<p><b> break;</b></p><p><b> }</b></p><p> close(clientfd); //關(guān)閉新建的連接</p><p> close(sock_fd); //關(guān)閉服務(wù)端監(jiān)聽的socket</p>
87、<p><b> return 0;</b></p><p><b> }</b></p><p><b> 4 設(shè)計(jì)總結(jié)</b></p><p> 在本學(xué)期的最后一周,我們被要求完成嵌入式的設(shè)計(jì)總結(jié),雖然只有不到一周的時(shí)間,但是大家都感覺收獲頗豐。把課堂上遺忘的、遺落的知識(shí)都撿了起
88、來,舊的知識(shí)新的知識(shí)都掌握了很多,并且切實(shí)的體會(huì)到軟件開發(fā)的困難與樂趣,認(rèn)識(shí)到了自己的不足,并且慢慢摸索,不恥下問,在老師和小組成員的共同努力下,結(jié)束了這次的實(shí)踐。</p><p> 此次課程設(shè)計(jì)老師要求我們完成兩道基礎(chǔ)題目,以及一道三選一的綜合題目。前面的基礎(chǔ)題目大家有在課堂上接觸過,并且通過查找資料,大家分工合作一個(gè)上午就有了很大的進(jìn)展,但是在下午的完善工作中還是被卡住了,一個(gè)小的程序調(diào)試不出來,不能出現(xiàn)要
89、求的結(jié)果,最后在其他組一個(gè)同學(xué)的幫助下完成了基礎(chǔ)題目。第二天大家開始做綜合題,經(jīng)過商量選擇了《基于socket編程的簡單聊天室程序設(shè)計(jì)》,其實(shí)三道題目大家都沒有把握能完成,對(duì)這道題比較有興趣就敲定了。開始就是大量的查找資料,因?yàn)榇蠹以谡n堂上學(xué)習(xí)的知識(shí)都太淺,并且大都停留在理論上,沒有開發(fā)經(jīng)驗(yàn),所以大量工作都依靠互聯(lián)網(wǎng),不過因?yàn)槲覀兘M成員的C的能力都挺好,所以能夠?qū)Υa程序理解并修改以及調(diào)試,最終還是盡我們最大努力完成了這次設(shè)計(jì)。<
90、/p><p> 下面整理一下這次課程設(shè)計(jì)中個(gè)人的總結(jié)。</p><p> 齊秀:搜集資料,寫論文</p><p> 這次的實(shí)踐中,我負(fù)責(zé)搜集資料以及論文編撰。在剛拿到題目的時(shí)候,因?yàn)榇蠹叶急容^束手無策,所以就必須要借用別人的東西,加以修改整理變成自己的東西。我查找了很多論文和書籍,然后根據(jù)設(shè)計(jì)要求將可用的東西整理打包給其他人,包括一些代碼和思想,在程序調(diào)試成功后進(jìn)
91、行了總結(jié)并參與撰寫論文。在這中間,我認(rèn)識(shí)到了我們的不足,需要學(xué)習(xí)的東西還有很多。</p><p> 許婷:編寫、調(diào)試程序</p><p> 在這次程序設(shè)計(jì)過程中,我主要參與了客戶端代碼的編寫和數(shù)道是交叉編譯環(huán)境的問題,還有就是串口速率不一致的問題。總而言之,遇到困難千萬不能放棄,要自己搜集資料,詢問同學(xué),不斷嘗試,在一次次失敗中汲取教訓(xùn),從而獲得進(jìn)步。</p><p
92、> 王青青:編寫、調(diào)試程序</p><p> 這次實(shí)驗(yàn)中,我們通過開發(fā)板與電腦相連,將程序下載到開發(fā)板上,進(jìn)行調(diào)試,在下載過程中碰到了minicom老進(jìn)不去,進(jìn)去之后,掛載不上,通過同學(xué)交流,設(shè)置NFS參數(shù),最后掛載上,在調(diào)試socket程序時(shí),程序錯(cuò)誤,沒有辦法執(zhí)行,一遍一遍的讀取程序,最終調(diào)試成功。</p><p><b> 王莉笑:寫報(bào)告</b>&l
93、t;/p><p> 我負(fù)責(zé)的是書寫報(bào)告。報(bào)告并不是最后才寫的,而是在設(shè)計(jì)的過程中一點(diǎn)點(diǎn)添加完善,在實(shí)踐開始先寫了大體框架以及設(shè)計(jì)要求,在大家實(shí)踐的過程中對(duì)流程以及出現(xiàn)的問題、解決方法等進(jìn)行記錄,繪制一些必要的圖表并且對(duì)結(jié)果整理,這些作為核心寫進(jìn)報(bào)告里,最后進(jìn)行總結(jié),并對(duì)全文排版。我在這個(gè)過程中沒有深入了解代碼,這是一個(gè)遺憾。</p><p> 張樂:編寫、調(diào)試程序</p>&
94、lt;p> 在本次嵌入式實(shí)驗(yàn)中,我主要完成的任務(wù)是編寫程序,調(diào)試程序。在實(shí)驗(yàn)過程碰到了很多問題,比如:minicom連接不上,通過計(jì)算機(jī),屬性,端口,進(jìn)行端口與速率設(shè)置,將其設(shè)置成com1,115200.在虛擬機(jī)中也要進(jìn)行設(shè)置,通過 ctrl+A,Z 進(jìn)入?yún)?shù)配置頁面,將tty01改成tty00,將速率改成115200,進(jìn)行保存。之后進(jìn)入minicom 然后進(jìn)行掛載,調(diào)試。由于筆記本的原因,好幾次鍵盤失控,這在實(shí)驗(yàn)中算是碰到的最
95、大問題,好幾次實(shí)驗(yàn)停滯不前,老師也沒有辦法,只能不停的重啟。最后重裝一次,才正常工作。最后完成實(shí)驗(yàn)。</p><p><b> 參考文獻(xiàn)</b></p><p> 孫弋.ARM+Linux嵌入式系統(tǒng)開發(fā)基礎(chǔ)[M].西安:西安電子科技出版社,2008;</p><p> 周留軍,武金磊.基于socket的簡單聊天室的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式課程設(shè)計(jì)報(bào)告畢業(yè)論文
- 嵌入式課程設(shè)計(jì)報(bào)告2
- 嵌入式課程設(shè)計(jì)報(bào)告---嵌入式文件鎖應(yīng)用
- 嵌入式課程設(shè)計(jì)報(bào)告 (2)
- 嵌入式課程設(shè)計(jì)報(bào)告91452
- 《嵌入式系統(tǒng)設(shè)計(jì)》課程設(shè)計(jì)報(bào)告
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)報(bào)告--數(shù)字相框
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)報(bào)告--qtopia移植
- 嵌入式開發(fā)畢業(yè)論文
- 嵌入式硬件課程設(shè)計(jì)報(bào)告---電梯系統(tǒng)
- 嵌入式課程設(shè)計(jì)---嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)
- 嵌入式課程設(shè)計(jì)--串口通信
- 嵌入式課程設(shè)計(jì)大作業(yè)
- 嵌入式系統(tǒng)綜述課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論