一、測試環境說明
程序測試硬件為:樹莓派3B+ ,以及4根杜邦線,1塊面包板,1個藍色led燈
杜邦線均為公-母線, 其母頭分別接樹莓派40GPIO口處的 3.3v(pin1),GND(pin39),pin11,pin18
LED燈的 正極連 pin18,負極連pin1 (在面包板上)
接pin11的杜邦線另一端公頭懸空,測試時可分別在面包板上與 pin1 或 pin39 連接,模擬一個撥動開關(如果有撥動開關可以直接利用)
基本系統:rasbian
nodejs:10.2.1
npm:6.1.0
gcc: 6.3.0
wiringPi & gpio:2.46
-------------------------------------------
二、關鍵代碼解析
1. 利用wiringPi和socket編寫本地tcp服務,具體代碼見項目代碼 rpi-express-demo/localSvc/server.c
#include #include #include #include #include #include #include #include #include #include #include #include #include #define SERVER_PORT 5555#define LEDpin 5#define KEYpin 0#define LINE_MAX 1024int setLEDon(void){ // 定義亮燈處理 digitalWrite(LEDpin,HIGH); return HIGH;} int setLEDoff(void){ // 定義滅燈處理 digitalWrite(LEDpin,LOW); return LOW;} int getKEY( ){ // 獲取燈狀態值 return digitalRead(KEYpin);}int main(){ //調用socket函數返回的文件描述符int serverSocket; //聲明兩個套接字sockaddr_in結構體變量,分別表示客戶端和服務器struct sockaddr_in server_addr;struct sockaddr_in clientAddr;int addr_len = sizeof(clientAddr);//用于接收連接,因為只有一個,所以同時只允許一個連接int client;char buffer[ LINE_MAX ];char rtmsg[ LINE_MAX ];int iDataNum;int LEDflag = LOW ;int KEYflag ;char *LED_ON = "on" ;char *LED_OFF = "off" ;char *KEY_GET = "get" ;char *CLOSE_MSG = "quit"; int Ec=0;/ //socket函數,失敗返回-1 //int socket(int domain, int type, int protocol); //第一個參數表示使用的地址類型,一般都是ipv4,AF_INET //第二個參數表示套接字類型:tcp:面向連接的穩定數據傳輸SOCK_STREAM //第三個參數設置為0if((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0){perror("socket");return 1;}bzero(&server_addr, sizeof(server_addr)); //初始化服務器端的套接字,并用htons和htonl將端口和地址轉成網絡字節序server_addr.sin_family = AF_INET;server_addr.sin_port = htons(SERVER_PORT); //ip可是是本服務器的ip,也可以用宏INADDR_ANY代替,代表0.0.0.0,表明所有地址server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //對于bind,accept之類的函數,里面套接字參數都是需要強制轉換成(struct sockaddr *) //bind三個參數:服務器端的套接字的文件描述符, if(bind(serverSocket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0){perror("connect");return 1;} //設置服務器上的socket為監聽狀態if(listen(serverSocket, 15) < 0) {perror("listen");return 1;}while(1){printf("Listening on port: %d ", SERVER_PORT); //調用accept函數后,會進入阻塞狀態 //accept返回一個套接字的文件描述符,這樣服務器端便有兩個套接字的文件描述符, //serverSocket和client。 //serverSocket仍然繼續在監聽狀態,client則負責接收和發送數據 //clientAddr是一個傳出參數,accept返回時,傳出客戶端的地址和端口號 //addr_len是一個傳入-傳出參數,傳入的是調用者提供的緩沖區的clientAddr的長度,以避免緩沖區溢出。 //傳出的是客戶端地址結構體的實際長度。 //出錯返回-1client = accept(serverSocket, (struct sockaddr*)&clientAddr, (socklen_t*)&addr_len);if(client < 0){perror("accept");continue;}printf(" recv client data...n"); //inet_ntoa ip地址轉換函數,將網絡字節序IP轉換為點分十進制IP //表達式:char *inet_ntoa (struct in_addr);printf("IP is %s ", inet_ntoa(clientAddr.sin_addr));printf("Port is %d ", htons(clientAddr.sin_port));while(1){iDataNum = recv(client, buffer, 1024, 0);if(iDataNum <= 0){ Ec++; if(Ec>5) break;continue;}buffer[iDataNum] = '
主站蜘蛛池模板: 伊人青青久 | 在线观看免费亚洲 | 成年视频国产免费观看 | 国产AV国产精品国产三级在线L | 97精品少妇偷拍蜜桃AV | 俄罗斯12x13x处| 国产午夜精品理论片免费观看 | 国产69精品久久久久APP下载 | 久久综合香蕉久久久久久久 | 成人在线小视频 | 亚洲国产在线午夜视频无 | 免费三级播放器 | 狠狠色欧美亚洲狠狠色www | 97影院午夜午夜伦不卡 | 欧美日韩另类在线观看视频 | 国产亚洲精品久久久久久久 | 久久九九有精品国产23百花影院 | 拔擦拔擦8X永久华人免费播放器 | 全是肉的高h短篇列车 | 91桃色污无限免费看 | 国产在线视频分类精品 | 国产av久久免费观看 | 真人女人无遮挡内谢免费视频% | 色噜噜狠狠色综合欧洲 | 我的好妈妈BD免费观看 | 国产精品色无码AV在线观看 | 又黄又粗又爽免费观看 | 人妻少妇69式99偷拍 | 2020国产欧洲精品视频 | 伊人青青久 | 嗯啊哈啊好棒用力插啊 | 草莓视频在线播放视频 | 九九热只有精品 | 9亚洲欧洲免费无码在线 | 草699一码二码三码四码 | 处初女处夜情视频在线播放 | 99热久久精品国产一区二区 | 亚洲.欧美.中文字幕在线观看 | 成人影院久久久久久影院 | 国产一区二区三区国产精品 | 四虎影院网红美女 |