標籤:結果 線上 udp 資料 elf linux make http 基於ip
7.1 tcp
Tcp是一種連線導向的、可靠的、基於IP的傳輸層協議,無論哪一方發送資料,都需要先建立串連,串連是通過三向交握來進行初始化的,
第一次握手,用戶端發送串連請求,等待伺服器確認。
第二次握手,伺服器收到請求,向用戶端發送確認,同時,向用戶端發送資料轉送請求資訊。
第三向交握,用戶端收到串連確認資訊,並向伺服器發送資料接收確認。
完成三向交握以後,開始資料的傳輸。
首先,通過socket函數建立socket通訊端,然後通過bind函數綁定一個連接埠號碼,用listen函數監聽這個連接埠號碼,是否用戶端發送串連請求資訊,一旦有串連請求,通過accept函數來接收相應的請求,並建立串連。最後就可以通過send或者recv函數發送或接收資訊。當然在用戶端同樣要建立socket通訊端,然後通過connect函數向伺服器監聽的連接埠發送串連請求,如果串連成功了以後,伺服器端和用戶端就可以進行資料傳遞了。
有兩個.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”,此時空格鍵自動被忽略了。
伺服器端:
用戶端:
接下來,我們將客服端程式下載到開發板,此時需要像第一個程式“”Hello,uClinux“程式一樣做同樣的事,我直接刪除了之前的hello程式,將用戶端的程式寫進同一個目錄scu檔案夾裡,並修改相應的Makefile檔案,如下
EXEC = tcp_client
OBJS = tcp_client.o
all: $(EXEC)
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o [email protected] $(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 總結
這一節課講了網路編程,雖然不多,但是每一個學習嵌入式的同學都是必須要掌握的,可見其重要性,內容不多,但需要花時間去理解,雖然不難,但是也不簡單,只有慢慢來,才能理解的透徹。
第7課 網路編程