嵌入式linux課程設(shè)計(jì)報告_第1頁
嵌入式linux課程設(shè)計(jì)報告_第2頁
嵌入式linux課程設(shè)計(jì)報告_第3頁
嵌入式linux課程設(shè)計(jì)報告_第4頁
嵌入式linux課程設(shè)計(jì)報告_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

重慶科技學(xué)院課程設(shè)計(jì)成果院〔系〕:_電氣與信息工程學(xué)院_班級:計(jì)科普0802學(xué)生姓名:莊桐泉學(xué)號:2023441067設(shè)計(jì)地點(diǎn)〔單位〕____I315_________________設(shè)計(jì)題目:_____聊天程序設(shè)計(jì)__________________________完成日期:2011年指導(dǎo)教師評語:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________成績(五級記分制):________________教師簽名:_________________________摘要嵌入式linux在電子行業(yè)的應(yīng)用很廣泛,學(xué)習(xí)嵌入式linux顯得非常重要。這次課程設(shè)計(jì)的主要目的是檢驗(yàn)上學(xué)期學(xué)習(xí)linux后的效果。通過根底題的代碼編寫,熟悉linuxC語言編程技巧。通過完成聊天程序的設(shè)計(jì),熟悉linux底層編程。利用QT設(shè)計(jì)界面,縮短開發(fā)時間。關(guān)鍵字:嵌入式linux;根底題;聊天程序;QT目錄課程設(shè)計(jì)任務(wù)書-4-題目一根底題-6-1設(shè)計(jì)內(nèi)容及要求-6-1.1二小題-6-1.2三小題-6-1.3四小題-7-1.3五小題-9-1.4六小題-11-1.5七小題-11-1.6八小題-13-題目二聊天程序設(shè)計(jì)-15-1.設(shè)計(jì)內(nèi)容及要求-15-1.1聊天程序的根本要求-15-1.2需實(shí)現(xiàn)的主要功能-15-2.需求分析-15-2.1QT設(shè)計(jì)-15-2.2效勞器端和客戶端的數(shù)據(jù)傳輸方式-16-2.3效勞器端功能設(shè)計(jì)-16-2.4客戶端功能設(shè)計(jì)-17-3.總體設(shè)計(jì)-17-3.1總體功能-17-4.詳細(xì)設(shè)計(jì)-17-4.1功能分析和描述-17-4.2客戶端功能模塊-17-4.3效勞器功能模塊-19-5.代碼實(shí)現(xiàn)-20-5.1客戶端代碼-20-5.2效勞器端代碼-22-6.功能實(shí)現(xiàn)-23-7.總結(jié)-23-8.致謝-23-9.參考文獻(xiàn)-23-課程設(shè)計(jì)任務(wù)書設(shè)計(jì)題目:根底題目學(xué)生姓名莊桐泉課程名稱嵌入式linux課程設(shè)計(jì)計(jì)科普2023地點(diǎn)I315起止時間2011-8-29至設(shè)計(jì)內(nèi)容及要求GCC編譯器的使用,LINUX系統(tǒng)C程序設(shè)計(jì)編譯、調(diào)試方法編寫程序?qū)?shù)組內(nèi)容倒置a[]=〞123456789”利用指針將數(shù)據(jù)A的內(nèi)容復(fù)制到數(shù)據(jù)B。創(chuàng)立兩線程,通過打印輸出各自線程號和打印次序,要求從打印結(jié)果看出兩個線程是并發(fā)執(zhí)行的。創(chuàng)立兩線程,A線程通過消息隊(duì)列發(fā)消息,B線程收到后在屏幕打印輸出,要求兩線程個打印出線程號和消息內(nèi)容。創(chuàng)立兩線程,A線程循環(huán)打印數(shù)組a[100],B線程循環(huán)將數(shù)組成員+1,要求利用互斥鎖,使每次輸出a[0]==a[99].創(chuàng)立兩線程,A線程每2秒打印一次字母A,B線程每秒打印一次字母B,要求利用同步信號量,使輸出字母B總是在A之后。8、通過Makefile,將project中的一個.c編譯成.a,另一個.c調(diào)用.a的函數(shù),要求實(shí)現(xiàn)靜態(tài)庫的生成和調(diào)用,運(yùn)行結(jié)果正確。設(shè)計(jì)參數(shù)進(jìn)度要求第一周之內(nèi)完成參考資料1、嵌入式Linux應(yīng)用程序開發(fā)標(biāo)準(zhǔn)教程.人民郵電出版社。華清遠(yuǎn)見嵌入式培訓(xùn)中心。2023.72、ZLGARMMAGIC2410實(shí)驗(yàn)指導(dǎo)、資料。其它設(shè)計(jì)題目:聊天程序設(shè)計(jì)學(xué)生姓名莊桐泉課程名稱嵌入式linux課程設(shè)計(jì)計(jì)科普2023地點(diǎn)I315起止時間2011-8-29至設(shè)計(jì)內(nèi)容及要求1、在QT〔或miniGUI〕編寫聊天程序,交叉編譯后下載到目標(biāo)機(jī),可實(shí)現(xiàn)兩臺目標(biāo)機(jī)可發(fā)送文本聊天2、QT〔或miniGUI〕界面設(shè)計(jì)至少包括“發(fā)送〞,“重置〞兩個按鈕,要求必須把目標(biāo)機(jī)的硬件鍵盤映射到QT設(shè)計(jì)的軟件界面中,實(shí)現(xiàn)軟件按鈕的功能。選作:發(fā)送文件。設(shè)計(jì)參數(shù)進(jìn)度要求做完根底題目之后開始做此題目。參考資料1、嵌入式Linux應(yīng)用程序開發(fā)標(biāo)準(zhǔn)教程.人民郵電出版社。華清遠(yuǎn)見嵌入式培訓(xùn)中心。2023.72、ZLGARMMAGIC2410實(shí)驗(yàn)指導(dǎo)、資料。其它說明1.本表應(yīng)在每次實(shí)施前一周由負(fù)責(zé)教師填寫二份,學(xué)院審批后交學(xué)院教務(wù)辦備案,一份由負(fù)責(zé)教師留用。2.假設(shè)填寫內(nèi)容較多可另紙附后。3.一題多名學(xué)生共用的,在設(shè)計(jì)內(nèi)容、參數(shù)、要求等方面應(yīng)有所區(qū)別。系主任:指導(dǎo)教師:2023題目一根底題1設(shè)計(jì)內(nèi)容及要求1.1二小題編寫程序?qū)?shù)組內(nèi)容倒置a[]=〞123456789”程序代碼實(shí)現(xiàn)如下:chara[]="0123456789";①chartmp;inti=0,j=0;for(i=0,j=strlen(a)-1;i<=strlen(a)/2-1;i++,j--)②{tmp=a[i];a[i]=a[j];a[j]=tmp;}for(i=0;i<strlen(a);i++)③printf("%c",a[i]);printf("\n");(3)程序分析:①定義數(shù)組②數(shù)組內(nèi)容倒置③輸出倒置后數(shù)組內(nèi)容〔4〕程序執(zhí)行效果如下:1.2三小題〔1〕利用指針將數(shù)據(jù)A的內(nèi)容復(fù)制到數(shù)據(jù)B?!?〕程序代碼實(shí)現(xiàn)如下:charA[]="abcd";charB[]="1234";①inti=0;char*tmp;②tmp=A;③for(i=0;i<strlen(A);i++)④B[i]=*tmp++;for(i=0;i<strlen(A);i++)⑤printf("%c",B[i]);printf("\n");〔3〕程序分析:①定義數(shù)組②定義指針③指針指向數(shù)組A④移動指針拷貝數(shù)字到B中⑤顯示拷貝后的數(shù)組〔4〕程序執(zhí)行效果如下:1.3四小題〔1〕創(chuàng)立兩線程,通過打印輸出各自線程號和打印次序,要求從打印結(jié)果看出兩個線程是并發(fā)執(zhí)行的?!?〕程序代碼如下:#defineTHREAD_NUMBER 2#defineREPEAT_NUMBER 5#defineDELAY_TIME_LEVELS 10.0void*thrd_func(void*arg)①{ intthrd_num=(int)arg; intdelay_time=0; intcount=0; printf("Thread%disstarting\n",thrd_num); for(count=0;count<REPEAT_NUMBER;count++) { delay_time=(int)(rand()*DELAY_TIME_LEVELS/(RAND_MAX))+1; sleep(delay_time);②printf("\tThread%d:job%ddelay=%d\n",thrd_num,count,delay_time); } printf("Thread%dfinished\n",thrd_num); pthread_exit(NULL);③}intmain(void){ pthread_tthread[THREAD_NUMBER]; intno=0,res; void*thrd_ret; for(no=0;no<THREAD_NUMBER;no++)④ { res=pthread_create(&thread[no],NULL,thrd_func,(void*)no); } for(no=0;no<THREAD_NUMBER;no++) { res=pthread_join(thread[no],&thrd_ret); } return0;}〔3〕程序分析:程序中創(chuàng)立2個線程,為了更加方便地描述線程之間的并行執(zhí)行,讓2個線程重用一個執(zhí)行函數(shù)。每個線程都有5次循環(huán),每次循環(huán)之間會隨機(jī)等待1-10s的時間,意義在于模擬每個任務(wù)的到達(dá)時間是隨機(jī)的,更加形象看出線程之間的并行執(zhí)行。創(chuàng)立線程執(zhí)行函數(shù),程序中2個線程重用一個執(zhí)行函數(shù)。讓線程延時,延時時間隨機(jī)產(chǎn)生。線程退出。創(chuàng)立2個線程?!?〕程序執(zhí)行效果如下:1.3五小題〔1〕創(chuàng)立兩線程,A線程通過消息隊(duì)列發(fā)消息,B線程收到后在屏幕打印輸出,要求兩線程個打印出線程號和消息內(nèi)容。〔2〕程序代碼如下:#defineBUFSZ 512#defineTHREAD_NUMBER 2structmessage①{ longmsg_type; charmsg_text[BUFSZ];};structmessagemsg;intqid;/*Createqueue*/void*thrd_func0(void*arg)②{ intthrd_num=(int)arg;intlen=0; printf("Thread%disstarting\n",thrd_num);sprintf(msg.msg_text,"%s","sendthemsg"); msg.msg_type=getpid(); len=strlen(msg.msg_text); /*添加消息到消息隊(duì)列*/msgsnd(qid,&msg,len,0);③printf("sendthemessageis:%s\n",(&msg)->msg_text); pthread_exit(NULL);④}void*thrd_func1(void*arg)⑤{ intthrd_num=(int)arg; printf("Thread%disstarting\n",thrd_num); /*讀取消息隊(duì)列*/ msgrcv(qid,&msg,BUFSZ,getpid(),0);⑥printf("recvthemessageis:%s\n",(&msg)->msg_text); pthread_exit(NULL);}void*(*constfunc[THREAD_NUMBER])(void*)={thrd_func0,thrd_func1};intmain(void){ pthread_tthread[THREAD_NUMBER]; intno=0,res; void*thrd_ret; key_tkey; intlen;key=ftok(".",'a');⑦ qid=msgget(key,IPC_CREAT|0666);⑧ for(no=0;no<THREAD_NUMBER;no++) { res=pthread_create(&thread[no],NULL,func[no],(void*)no); } for(no=0;no<THREAD_NUMBER;no++)⑨ { res=pthread_join(thread[no],&thrd_ret); } (msgctl(qid,IPC_RMID,NULL);⑩ return0;}代碼分析如下:該程序?qū)崿F(xiàn)了使用消息隊(duì)列進(jìn)行線程之間的通信,包括消息隊(duì)列的創(chuàng)立、消息發(fā)送和讀取、消息隊(duì)列的撤銷和刪除等操作。定義消息隊(duì)列消息結(jié)構(gòu)體創(chuàng)立線程0,用于消息隊(duì)列發(fā)送消息添加消息到消息隊(duì)列退出線程創(chuàng)立線程1,用于消息隊(duì)列讀取消息讀取消息隊(duì)列根據(jù)不同的路徑和關(guān)鍵表示產(chǎn)生標(biāo)準(zhǔn)的key創(chuàng)立消息隊(duì)列等待線程從系統(tǒng)內(nèi)核中移走消息隊(duì)列〔4〕程序執(zhí)行效果如下:1.4六小題〔1〕創(chuàng)立兩線程,A線程循環(huán)打印數(shù)組a[100],B線程循環(huán)將數(shù)組成員+1,要求利用互斥鎖,使每次輸出a[0]==a[99].〔2〕程序源代碼如下:〔3〕程序分析如下:1.5七小題〔1〕創(chuàng)立兩線程,A線程每2秒打印一次字母A,B線程每秒打印一次字母B,要求利用同步信號量,使輸出字母B總是在A之后?!?〕程序代碼如下:#defineTHREAD_NUMBER 2sem_tsem[THREAD_NUMBER];void*thrd_func0(void*arg)//A①{ arg=arg; while(1){printf("A\n");②sem_post(&sem[1]);③sleep(2); ④ } pthread_exit(NULL);⑤}void*thrd_func1(void*arg)//B⑥{ arg=arg; while(1){sem_wait(&sem[1]);⑦printf("B\n");⑧sleep(1);⑨ } pthread_exit(NULL);}void*(*constfunc[THREAD_NUMBER])(void*)={thrd_func0,thrd_func1};intmain(void){ pthread_tthread[THREAD_NUMBER]; intno=0,res; void*thrd_ret; for(no=0;no<THREAD_NUMBER;no++)⑩ { res=pthread_create(&thread[no],NULL,func[no],(void*)no); } printf("Createthreadsuccess\nWaitingforthreadstofinish...\n"); for(no=0;no<THREAD_NUMBER;no++) { sem_destroy(&sem[no]); } return0;}〔3〕程序分析如下:程序創(chuàng)立兩線程,實(shí)現(xiàn)A線程每2秒打印一次字母A,B線程每秒打印一次字母B,利用同步信號量,使輸出字母B總是在A之后。創(chuàng)立線程0執(zhí)行函數(shù),用于打印字符’A’打印字符’A’對信號量1進(jìn)行V操作延時2s退出線程創(chuàng)立線程1執(zhí)行函數(shù),用于打印字符’B’對信號量1進(jìn)行P操作打印字符’B’延時1s創(chuàng)立線程〔4〕程序執(zhí)行效果如下:1.6八小題〔1〕通過Makefile將project中的一個.c編譯成.a,另一個.c調(diào)用.a的函數(shù),要求實(shí)現(xiàn)靜態(tài)庫的生成和調(diào)用,運(yùn)行結(jié)果正確。〔2〕編寫靜態(tài)庫程序thread.c如下:#include<stdio.h>voidpf1(void){printf("********\n");return;}voidpf2(void){printf("#########\n");return;}該程序定義兩個函數(shù),分別打印不同的內(nèi)容,該程序?qū)⒈痪幾g成.a靜態(tài)庫編寫調(diào)用程序call.c如下:externvoidpf1(void);externvoidpf2(void);intmain(void){pf1();pf2();return0;}該程序?qū)o態(tài)庫進(jìn)行調(diào)用,調(diào)用靜態(tài)庫中的兩個函數(shù)pf1和pf2。編寫Makefile如下:CC=gccCPPFLAGS=-cOBJS=thread.oSOURCE=thread.cCALL_SOURCE=call.cLIB=libthread.aEXEC=callAR=arthread:${OBJS} ${CC}-c${SOURCE}-o${OBJS} ${AR}rcsv$(LIB)thread.o ${CC}-o${EXEC}${CALL_SOURCE}-L.-lthread.PHONY:cleanclean: -rm-f${OBJS}${EXEC}${LIB}Makefile文件實(shí)現(xiàn)對靜態(tài)庫程序編譯成.a靜態(tài)庫,并且編譯調(diào)用靜態(tài)庫的程序call.c為可執(zhí)行文件call〔4〕程序執(zhí)行效果如下:題目二聊天程序設(shè)計(jì)1.設(shè)計(jì)內(nèi)容及要求1.1聊天程序的根本要求1、在QT〔或miniGUI〕編寫聊天程序,交叉編譯后下載到目標(biāo)機(jī),可實(shí)現(xiàn)兩臺目標(biāo)機(jī)可發(fā)送文本聊天。2、QT〔或miniGUI〕界面設(shè)計(jì)至少包括“發(fā)送〞,“重置〞兩個按鈕,要求必須把目標(biāo)機(jī)的硬件鍵盤映射到QT設(shè)計(jì)的軟件界面中,實(shí)現(xiàn)軟件按鈕的功能。1.2需實(shí)現(xiàn)的主要功能(1)客戶端輸入效勞器IP和端口號。(2)效勞器必須成功啟動。(3)每一個客戶端可以尋找效勞器,并且與效勞器建立連接。(4)客戶端和效勞器可以實(shí)現(xiàn)通信。(5)通信的內(nèi)容可以顯示在面板上。(6)利用QT設(shè)計(jì)界面,并下載到MagicARM2410上面。2.需求分析2.1QT設(shè)計(jì)QT設(shè)計(jì)編寫和調(diào)試階段使用周立功MagicARM2410箱子提供的QTforPC編譯器,運(yùn)行測試階段使用QTforARM編譯器。使用QTforPC階段編譯程序的步驟如下〔以編譯hello.cpp程序?yàn)槔常骸?〕進(jìn)入/x86-qtopia目錄,運(yùn)行set-env腳本,設(shè)置環(huán)境變量。$.set-env〔2〕進(jìn)入hello目錄,然后用progen工具生成工程文件。$cdhello$vihello.cpp$progen–tapp.t–o〔3〕使用tmake工具,生成hello工程的Makefile文件。$tmake-oMakefile〔4〕修改Makefile文件,在LIBS變量中增加需要用到的庫,然后輸入make命令編譯。LIBS=$(SUBLIBS)-L$(QTDIR)/lib-lqte-lm-lstdc++$make〔5〕啟動虛擬控制臺,運(yùn)行hello程序〔主機(jī)須啟動幀緩沖,必須能夠訪問/dev/fb0〕。$cd/zylinux/x86-qtopia$.set-env$cdhello$./hello–qws如果要將Hello程序發(fā)布到MagicARM2410上運(yùn)行,還需進(jìn)行以下工作:〔6〕進(jìn)入/zylinux/arm-qtopia目錄,并將hello工程復(fù)制到當(dāng)前目錄下。$cd/zylinux/arm-qtopia$cp–av/zylinux/x86-qtopia/hello〔7〕運(yùn)行當(dāng)前目錄下的set-env文件,重新設(shè)置環(huán)境變量,進(jìn)入hello目錄,使用tmake工具,重新生成Makefile文件。$.set-env$cdhello$tmake-oMakefile〔8〕按照步驟(4)的方法修改包含庫,編譯,得到可執(zhí)行文件hello,將hello文件添加到文件系統(tǒng)中,更新文件系統(tǒng)?!?〕插入USB鼠標(biāo)和USB鍵盤,啟動MagicARM2410。啟動Qtopia的終端,運(yùn)行hello程序。利用同樣的編譯方法,客戶端QT程序進(jìn)行編譯和調(diào)試。客戶端QT界面設(shè)計(jì)客戶端QT需要以下根本組件:〔1〕兩個QEditLine,一個用于輸入效勞器IP地址〔可讀可寫〕,另一個用于輸入效勞器端口號〔可讀可寫〕?!?〕三個按鈕,一個用于連接效勞器,另一個用于發(fā)送消息,最后一個用于清空發(fā)送區(qū)域數(shù)據(jù)?!?〕四個標(biāo)簽,用于顯示不用組件的內(nèi)容。〔4〕兩個MultiLineedit,一個用于顯示通信內(nèi)容〔只讀〕,一個作為發(fā)送區(qū)域〔可讀可寫〕。2.2效勞器端和客戶端的數(shù)據(jù)傳輸方式效勞器端和客戶端的數(shù)據(jù)是用TCP套接字來傳輸?shù)摹P地址表示Internet上的計(jì)算機(jī),端口號標(biāo)識正在計(jì)算機(jī)運(yùn)行的進(jìn)程。端口號與IP地址的組合得出一個網(wǎng)絡(luò)套接字??蛻舳耸褂胠inuxC函數(shù)socket建立到效勞器的套接字連接。當(dāng)套接字連接socket建立后,可以利用linuxC語言中的send函數(shù)和recv函數(shù)來實(shí)現(xiàn)簡單的發(fā)送和接收消息。2.3效勞器端功能設(shè)計(jì)由于時間有限,效勞器并沒有用QT來編寫界面,只是實(shí)現(xiàn)一個簡單的控制程序。效勞器主要實(shí)現(xiàn)有:〔1〕創(chuàng)立套接字〔2〕對套接字、IP地址和端口號進(jìn)行綁定〔3〕進(jìn)行監(jiān)聽〔4〕等待客戶端的連接〔5〕對客戶端接收和發(fā)送數(shù)據(jù)2.4客戶端功能設(shè)計(jì)客戶端使用QT設(shè)計(jì)界面,客戶端實(shí)現(xiàn)的功能如下:〔1〕創(chuàng)立套接字〔2〕連接效勞器〔3〕與效勞器通信3.總體設(shè)計(jì)3.1總體功能根據(jù)對需求所做的分析,聊天程序需要實(shí)現(xiàn)的根本功能應(yīng)包括以下幾個方面:(1)客戶端輸入效勞器IP和端口號。(2)效勞器必須成功啟動。(3)每一個客戶端可以尋找效勞器,并且與效勞器建立連接。(4)客戶端和效勞器可以實(shí)現(xiàn)通信。(5)通信的內(nèi)容可以方便查看。使用QT設(shè)計(jì)的界面簡潔,大方,操作簡單,方便,容易上手,用戶可以快速掌握操作流程。4.詳細(xì)設(shè)計(jì)4.1功能分析和描述聊天工具包括兩大功能模塊:客戶端和效勞器端。具體實(shí)現(xiàn)的功能創(chuàng)立套接字、連接通信、接收數(shù)據(jù)顯示和發(fā)送數(shù)據(jù)。4.2客戶端功能模塊連接效勞器連接效勞器之前需要解析效勞器地址、創(chuàng)立套接字、設(shè)置sockaddr_in結(jié)構(gòu)體中相關(guān)參數(shù)。4.2.2發(fā)送消息功能連接功能是開始聊天前必須進(jìn)行的步驟,連接成功之后,就可以進(jìn)行發(fā)送消息了。發(fā)送消息功能流程圖如圖2-5所示:圖2-5發(fā)送消息功能流程圖4.2.3接收消息模塊連接成功后,就可以接收效勞器發(fā)送過來的數(shù)據(jù)。4.3效勞器功能模塊效勞器的設(shè)計(jì)并沒有使用QT編寫界面,效勞器端實(shí)現(xiàn)的功能有:圖2-8效勞器模塊流程圖5.代碼實(shí)現(xiàn)5.1客戶端代碼5.1.1EditDemo::EditDemo(QWidget*parent,constchar*name):QWidget(parent,name){ QGridLayout*grid=newQGridLayout(this,6,3,0,0); //IPaddr QLabel*label1=newQLabel("IPAddr:",this); grid->addWidget(label1,0,0); edit_ip=newQLineEdit(this);edit_ip->setText(""); grid->addWidget(edit_ip,0,1); //ServerPort QLabel*label2=newQLabel("Server grid->addWidget(label2,1,0); edit_port=newQLineEdit(this);edit_port->setText("4321"); grid->addWidget(edit_port,1,1); QPushButton*btn=newQPushButton("Connect",this); /*addtheconnectbutton*/grid->addWidget(btn,2,1); /*addthebutton*/ connect(btn,SIGNAL(clicked()),this,SLOT(ButtonConnect())); //multilineinputmode QLabel*label3=newQLabel("ContractArea:",this); grid->addWidget(label3,3,0); multiedit_contract=newQMultiLineEdit(this);multiedit_contract->setReadOnly(1);//setreadonlygrid->addWidget(multiedit_contract,3,1); QLabel*label4=newQLabel("SendArea:",this); grid->addWidget(label4,4,0); multiedit_send=newQMultiLineEdit(this);grid->addWidget(multiedit_send,4,1); QPushButton*button_send=newQPushButton("Send",this);/*addthesendbutton*/grid->addWidget(button_send,5,0); connect(button_send,SIGNAL(clicked()),this,SLOT(ButtonSend()));QPushButton*button_clear=newQPushButton("Clear",this);/*addtheclearbutton*/grid->addWidget(button_clear,5,1); connect(button_clear,SIGNAL(clicked()),this,SLOT(ButtonClear()));}EditDemo::~EditDemo(){if(socket_flag==1)/*ifcreatesocketsuccess*/{close(sockfd);/*Closethesocket*/printf("Closethesocket\n");}}創(chuàng)立套接字voidEditDemo::CreateSocket(void){ /*地址解析函數(shù)*/ host=gethostbyname(edit_ip->text()); /*創(chuàng)立socket*/ sockfd=socket(AF_INET,SOCK_STREAM,0); /*設(shè)置sockaddr_in結(jié)構(gòu)體中相關(guān)參數(shù)*/ serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(atoi(edit_port->text())); serv_addr.sin_addr=*((structin_addr*)host->h_addr); bzero(&(serv_addr.sin_zero),8);}創(chuàng)立線程void*task(void*arg){intrecvbytes=0;charbuf[BUFFER_SIZE]={0};arg=arg;while(1){if((recvbytes=recv(sockfd,buf,BUFFER_SIZE,0))>0){multiedit_contract->append("Serversaid:"+(QString)buf);}}}voidCreateThread(void){ intresult=0; result=pthread_create(&thread1,NULL,task,(void*)0);/*CreateThread*/}5.2效勞器端代碼#definePORT 4321#defineBUFFER_SIZE 1024#defineMAX_QUE_CONN_NM 5intmain(){ structsockaddr_i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論