歡迎來到中國機電網    [ 請登錄 ]  [ 會員注冊 ]

返回首頁|English|設為首頁|加入收藏|

您現在的位置:中國機電網 - 技術資料
aworks編程——socket通信
作者: 佚名 時間:2019-7-23文章來源:訪問量:1522

socket在計算機通信領域被稱為“套接字”,是網絡通信的一種方式,在aworks系統中如何使用socket api建立服務器與客戶端,進行數據通信呢?本文將詳細為你介紹。

概述

要編寫通過計算機網絡通信的程序,首先要確定這些程序相互通信使用的協議,通常使用tcp或udp協議族。tcp是面向連接的傳輸協議,建立連接時需要經過三次握手,斷開連接時需要經過四次握手,中間傳輸數據也要回復ack包進行確認。而udp是非連接的傳輸協議,沒有建立連接和斷開連接的過程,它只是簡單的把數據丟到網絡中,也不明確區分服務器和客戶端。因此tcp比udp協議更加可靠,且tcp和udp編程大致相同,所以本文就以tcp協議為例,建立圖1所示的基本客戶/服務器網絡模型,進行通信。

圖1 基本服務器-客戶端模型

基本套接字編程

圖2給出了一對客戶與服務器進程之間發生的典型事件的時間表。服務器首先啟動,稍后客戶端啟動連接到服務器。所有的客戶和服務器都從調用socket開始,它返回套接字描述符;客戶隨后調用connect,服務器則調用bind、listen和accept;建立連接之后調用send、recv函數進行數據傳輸。數據傳輸完成后,套接字使用標準的closesocket函數關閉。

圖2 基本客戶/服務器程序的套接字函數

socket()函數:指定期望的通信協議類型(使用ipv4的tcp、使用ipv6的udp等)創建套接字;

blind()函數:將套接字與本地的ip地址和端口綁定;

connect()函數:客戶端向服務器發出連接請求;

listen()函數:僅服務器調用,使套接字進入被動監聽狀態。所謂被動監聽是指當沒有客戶端請求時,套接字處于“睡眠”狀態,只有當接收到客戶端請求時,套接字才會被喚醒來響應請求;

accept()函數:當套接字處于監聽狀態時,可以通過aceept函數來接收客戶端的請求;

send/recv()函數:發送和接收函數;

closesocket()函數:關閉套接字,回收資源。

網絡連接與配置

socket通信程序基于網絡之上,常規的開發板一般都攜帶以太網外設,所以本文以以太網為例,配置開發板的網絡連接。

首先需要用網線連接開發板的網口和電腦,來建立網絡的物理連接。其次在aworks sdk包中的aw_prj_params.h文件中打開以太網設備宏,如程序清單1。

程序清單1 打開以太網配置宏

再次在awbl_hwconf_imx1050_enet.h文件中配置以太網的ip地址、子網掩碼和網關,并關閉dhcp,使用靜態的ip地址,如程序清單2。

程序清單2 ip地址設置

最后修改電腦為靜態ip地址并與開發板ip地址位于同一網段。

tcp客戶端實例

按照基本的套接字編程流程,建立一個客戶端,我們只需要調用socket、connect、send、recv、closesocket函數即可,如程序清單3,首先使用socket創建一個tcp類型的套接字,再調用connect連接到已指定的服務器(ip地址為192.168.1.34、端口號為4000),當服務器端接收客戶端的連接請求后,connect函數退出阻塞狀態,進入循環,再在循環中調用send函數向服務器發送數據,調用recv函數(阻塞)接收數據。當數據傳輸完成后,使用closesocket關閉連接,回收資源。

程序清單3 回聲客戶端程序

程序編寫完成后,我們使用tcp上位機軟件測試。打開tcp調試軟件,如圖3。創建服務器,如圖4。最后啟動服務器,如圖5。

圖3 tcp調試工具

圖4 創建服務器

圖5 啟動服務器

以上步驟就緒后,在主程序中調用demo_tcp_client_entry()入口函數,編譯、下載程序到開發板,待程序運行之后,可以在shell界面看到tcp客戶端連接成功,如圖6,此時在上位機軟件上可以看到建立的tcp連接,在發送區域向客戶端發送數據,在接收區將看到客戶端回發的數據,如圖7。shell界面打印客戶端收到的數據,如圖8。

圖6 tcp客戶端連接成功

圖7 服務器數據顯示

圖8 客戶端數據打印

資訊關鍵詞】:    【打印】【關閉】【返回頂部

  • 資訊
  • 政策
  • 市場
  • 技術
熱點資訊
  • 一周
  • 一月
  • 一年

資訊投稿

郵箱:[email protected]

電話:0571-28331524

版權所有:中國機電網|中國機電傳媒研究中心

地址:杭州市濱江區西浦路1503號濱科大廈11樓(杭二中斜對面) 浙B2-20080178-6

聯系電話:0571-87774297 傳真:0571-28290892 Email:[email protected] 技術支持:杭州濱興科技股份有限公司

66777论码堂心水论坛