第7課 網絡編程

7.1 tcp

Tcp是一種面向鏈接的、可靠的、基於IP的傳輸層協議,不管哪一方發送數據,都須要先創建鏈接,鏈接是經過三次握手來進行初始化的,linux

第一次握手,客戶端發送鏈接請求,等待服務器確認。編程

第二次握手,服務器收到請求,向客戶端發送確認,同時,向客戶端發送數據傳輸請求信息。服務器

第三次握手,客戶端收到鏈接確認信息,並向服務器發送數據接收確認。網絡

完成三次握手之後,開始數據的傳輸。socket

首先,經過socket函數建立socket套接字,而後經過bind函數綁定一個端口號,用listen函數監聽這個端口號,是否客戶端發送鏈接請求信息,一旦有鏈接請求,經過accept函數來接收相應的請求,並創建鏈接。最後就能夠經過send或者recv函數發送或接收信息。固然在客戶端一樣要創建socket套接字,而後經過connect函數向服務器監聽的端口發送鏈接請求,若是鏈接成功了之後,服務器端和客戶端就能夠進行數據傳遞了。tcp

有兩個.c文件,tcp_server.c和tcp_client.c。首先在linux系統裏調試一下,將這兩個文件放入同一個目錄下,分別編譯一下,命令:sudo gcc -o tcp_server tcp_server.c和sudo gcc -o tcp_client tcp_client.c函數

而後經過./tcp_server運行服務器端,再開一個terminal,轉入到同一個目錄下,經過./tcp_client 192.168.0.222 運行客戶端。從服務器端就能夠看到「ok:server has got connect from 192.168.0.222「表示鏈接成功。咱們在服務器端輸入「hello world」,客戶端能夠收到字符的個數,同時收到相應的數據爲「helloworld」,此時空格鍵自動被忽略了。學習

服務器端:spa

 

客戶端:3d

 

接下來,咱們將客服端程序下載到開發板,此時須要像第一個程序「」Hello,uClinux「程序同樣作一樣的事,我直接刪除了以前的hello程序,將客戶端的程序寫進同一個目錄scu文件夾裏,並修改相應的Makefile文件,以下

EXEC = tcp_client

OBJS = tcp_client.o

all: $(EXEC)

$(EXEC): $(OBJS)

       $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)

romfs:

       $(ROMFSINST) /bin/$(EXEC)

clean:

       -rm -f $(EXEC) *.elf *.gdb *.o

完成之後回到目錄uClinux-dist目錄下執行sudo make,而後下載到開發板。下載完成後,在linux端運行服務器程序./server,

 

而且在開發板上運行客戶端程序./tcp_client 192.168.0.222,能夠看到鏈接成功。

 

 

在服務器端發送「hello,world」,在開發板上就會收到相應的數據。

 

7.2 udp

Udp和tcp有點不一樣,udp不須要通過三次握手,將數據發送過去不須要對方迴應,就像發短信同樣,短信發送過去就好了,不須要去了解對方收沒收到。

有兩個.c文件,udp_server.c和udp_client.c。首先在linux系統裏調試一下,將這兩個文件放入同一個目錄下,分別編譯一下,命令:sudo gcc -o udp_server udp_server.c和sudo gcc -o udp_client udp_client.c。

以下圖所示:

 

一樣,須要在開發板裏驗證一下,此次將開發板做爲服務器,將電腦linux端做爲客戶端,驗證結果以下:

 

7.3 在線升級

咱們以前的文件系統和內核鏡像文件都是經過網線來下載,無法進行在線升級,接下來經過tftp進行在線升級,

首先在uClinux-dist目錄下,執行sudo make xconfig進行相應的配置,選擇user setting->Network Applications 選擇tftp而且保存退出,

 

而後執行sudo make,完了之後下載到開發板,命令以下圖所示:

 

 

 

下載內核和鏡像命令不在像以前那樣了,在主機上直接下載。可是,燒錄在哪裏命令仍是沒有變。之後燒錄程序,就不用再拔電重啓了。。。

7.4 總結

這一節課講了網絡編程,雖然很少,可是每個學習嵌入式的同窗都是必需要掌握的,可見其重要性,內容很少,但須要花時間去理解,雖然不難,可是也不簡單,只有慢慢來,才能理解的透徹。

相關文章
相關標籤/搜索