第一課:什麼是樹莓派
第二課:基於樹莓派的10個經典專案
第三課:購買您的第一個樹莓派
第四課:如何安裝樹莓派系統
第五課:樹莓派C語言程式設計手冊
第六課:樹莓派led控制
第七課:樹莓派按鍵控制
第八課:樹莓派PWM(脈寬調製)
第九課:樹莓派數碼管顯示
第十課:樹莓派如何讀取溫溼度感測器(dht11)數據
第十一課:樹莓派控制電機
第十二課:樹莓派搭建伺服器
上一節課,我們實現了伺服器,伺服器必須要有用戶端纔有意義,那麼這節課我們講解用戶端的實現方法。
我們這裏的實驗方法,非常簡單,就是開啓兩個終端,一個執行伺服器,另一個執行用戶端,就像這樣:
這個實驗,可以很快的驗證伺服器是不是OK,這樣再往其他用戶端擴充套件,比如用QT開發一個用戶端,或者用小程式開發一個用戶端,這樣你的精力就只需要集中在用戶端那邊了,因爲伺服器已經證明是沒有問題的,可以正常收到數據的。
建立一個用戶端,只需要2步:
1)建立通訊端
2)連線伺服器
然後就是發送數據給伺服器了。
用戶端建立通訊端與伺服器是一樣的,呼叫socket函數,如下
int fd;
//第一步:建立通訊端
fd = socket(AF_INET,SOCK_STREAM,0);//使用ipv4地址族,TCP協定
跟伺服器一模一樣
//int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
連線伺服器,跟伺服器的bind函數很類似,其中:
第一個參數:
sockfd是socket函數的返回值,
第二個參數:
需要設定伺服器的IP地址和埠號,告訴程式,你要連到哪個伺服器。
第三個參數:
存放這個結構體指針所指向記憶體位元組大小,就是第二參數所佔空間的位元組大小。
返回值:
connect如果連線到伺服器成功,則返回0,失敗返回-1;
接下來,就可以通過write函數發送數據給伺服器了。
pi@xiajiashan:~/pi-c$ cat -n client_tcp.c
1 #include <stdio.h>
2 #include <sys/types.h> /* See NOTES */
3 #include <sys/socket.h>
4 #include <stdlib.h>
5 #include <fcntl.h>
6 #include <unistd.h>
7 #include <netinet/in.h>
8 #include <arpa/inet.h>
9 #include <stdlib.h>
10 #include <string.h>
11 //int socket(int domain, int type, int protocol);
12 #define SERVER_IP "192.168.137.243"
13 #define SERVER_PORT 8990
14 int main(void)
15 {
16 int fd;
17 //第一步:建立通訊端
18 fd = socket(AF_INET,SOCK_STREAM,0);//使用ipv4地址族
19 printf("fd = %d\n",fd);
20 if(fd==-1)
21 {
22 perror("socket failed...");
23 exit(-1);
24 }
25 //第二步:鏈接到伺服器
26 //int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
27 int retval;
28 struct sockaddr_in serveraddr;//設定伺服器IP地址
29 serveraddr.sin_family = AF_INET;//IPV4
30 serveraddr.sin_port = htons(SERVER_PORT);//把主機地址轉爲網路地址
31 // in_addr_t inet_addr(const char *cp);
32 serveraddr.sin_addr.s_addr = inet_addr(SERVER_IP);
33 retval = connect(fd,(struct sockaddr*)&serveraddr, 16);
34 printf("retval = %d\n",retval);
35 if(retval==-1)
36 {
37 perror("connect failed...");
38 close(fd);
39 exit(-1);
40 }else{
41 printf("連線到伺服器(%s:%d)成功...\n",SERVER_IP,SERVER_PORT);
42 }
43 char buf[100]="";
44 while(1)
45 {
46 printf("請輸入要發送給伺服器的數據(end結束):");
47 fgets(buf,100,stdin);//從鍵盤獲取100個位元組存放到buf中
48 retval = write(fd,buf,strlen(buf)-1);
49 if(strncmp(buf,"end",3)==0) break;
50 memset(buf,0,100);
51 }
52 close(fd);
53 return 0;
54 }
55
pi@xiajiashan:~/pi-c$
好了,用戶端就寫到這裏,接下來寫如何用QT開發用戶端。
如果覺得本部落格對你有幫助,就收藏吧!
第一課:什麼是樹莓派
第二課:基於樹莓派的10個經典專案
第三課:購買您的第一個樹莓派
第四課:如何安裝樹莓派系統
第五課:樹莓派C語言程式設計手冊
第六課:樹莓派led控制
第七課:樹莓派按鍵控制
第八課:樹莓派PWM(脈寬調製)
第九課:樹莓派數碼管顯示
第十課:樹莓派如何讀取溫溼度感測器(dht11)數據
第十一課:樹莓派控制電機
第十二課:樹莓派搭建伺服器