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」,在開發板上就會收到相應的數據。
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端做爲客戶端,驗證結果以下:
咱們以前的文件系統和內核鏡像文件都是經過網線來下載,無法進行在線升級,接下來經過tftp進行在線升級,
首先在uClinux-dist目錄下,執行sudo make xconfig進行相應的配置,選擇user setting->Network Applications 選擇tftp而且保存退出,
而後執行sudo make,完了之後下載到開發板,命令以下圖所示:
下載內核和鏡像命令不在像以前那樣了,在主機上直接下載。可是,燒錄在哪裏命令仍是沒有變。之後燒錄程序,就不用再拔電重啓了。。。
這一節課講了網絡編程,雖然很少,可是每個學習嵌入式的同窗都是必需要掌握的,可見其重要性,內容很少,但須要花時間去理解,雖然不難,可是也不簡單,只有慢慢來,才能理解的透徹。