【通訊】TCP/IP通信簡述與Matlab實現


1.TCP/IP通信概述

1.1什么是協議?

  • 其實協議相當於兩個需要通信的雙方預設的一種約定,它對數據的傳輸格式、傳輸速率、傳輸步驟,報文的交換方式做了統一的規定,通信雙方必須同時遵守才能夠完成數據交換。而我們常說的TCP/IP協議其實是一個協議集合,是一個協議族的統稱,里面包括了 IP 協議、ICMP 協議、TCP 協議、以及 http、ftp、pop3、https 協議等。網絡中的計算機都采用這套協議族進行互聯。

  • TCP/IP協議按照層次分為以下幾層:

引自Matlab對TCP/IP的介紹: 傳輸控制協議(TCP)是位於Internet協議(IP)之上的傳輸協議,並且是最常用的網絡協議之一。 MATLAB®TCP / IP客戶端支持使用原始套接字通信,並允許您從MATLAB連接到遠程主機以讀取和寫入數據。 例如,您可以連接到遠程氣象站,獲取數據並繪制數據。

原文: Transmission Control Protocol (TCP) is a transport protocol layered on top of the Internet Protocol (IP) and is one of the most used networking protocols. The MATLAB® TCP/IP client support uses raw socket communication and lets you connect to remote hosts from MATLAB for reading and writing data. For example, you can connect to a remote weather station, acquire data, and plot the data.

Raw Socket : 即原始套接字,可以接收本機網卡上的數據幀或者數據包.

  • TCP / IP具有一端傳輸到連接的另一端的長數據流,而另一長數據流則沿相反的方向流動。 一端的TCP / IP堆棧負責將數據流分解為數據包並發送那些數據包,而另一端的堆棧則負責使用數據包頭中的信息將數據包重組為數據流。
  • TCP / IP發送的數據包包含唯一的序列號。 在通信開始時,將起始序列號傳送到另一端。 接收方確認每個數據包,並且確認包含序列號,以便發送方知道已確認哪個數據包。 由於發送方會收到每個收到的數據包的確認,因此發送方會知道數據包何時未到達並可以重新發送它們。 同樣,接收者可以按正確的順序將亂序到達的數據包重新組合。

2.Matlab實現TCP/IP通信

有了上面簡單了解,趕緊看看如何實現,例如有兩台電腦,連接到了同一個局域網,它們的Ip地址分別為:192.168.1.103和192.168.1.108,則可以通過TCP/IP實現兩台電腦的通信,將下面兩端程序分別在兩台電腦上運行,就可以通信了。

注意,先要運行服務端的代碼,最起碼要運行到fopen()那一行,然后程序會一直運行等着,知道再運行客戶端程序fopen()時,兩邊才會建立起通信來。

%客戶端(發送端)
%要運行客戶端的電腦IP地址為192.168.1.103,要與192.168.1.108連接,則有下面:
tcpip_client = tcpip('192.168.1.108',2999,'NetworkRole','client');%與IP地址為192.168.1.108建立連接,端口號為2999(可自己設置,隨便填都行,只要不占用,但注意端口號范圍),本機作為客戶機連接。
tcpip_client.OutputBuffersize=100000;%這個是設置的緩沖區大小,matlab默認的緩沖區大小僅僅512bit,而一個double類型的數據就要占據8字節大小的空間,所以超出范圍后就寫不進去緩沖區,發出去的只有那一部分,所以有必要擴大緩沖區。所以弄大一點。
fopen(tcpip_client);%與一個服務器建立連接,直到建立完成返回,否則報錯。
data=[32213,213,8645,34,3,6,56,5676,2343];;%發送的數據。	
fopen(tcpip_client);
fwrite(tcpip_client,data,'double');%寫入(發送)數據
fclose(tcpip_client);		
%服務端(接收端)
%要運行服務端的電腦IP地址為192.168.1.108,要與客戶端連接建立通信,可以按照下面連接:
tcpip_server = tcpip('192.168.1.103',2999,'NetworkRole','server');%192.168.1.103是客戶端的地址,與此建立連接,端口號為2999(服務端和客戶端兩者要一樣),本機作為服務端。
%其實也可以按照下面的IP地址建立一個服務端,0.0.0.0地址可以監聽所有的請求的IP地址,所以就不用再寫客戶端的IP了
%tcpip_server= tcpip('0.0.0.0',2999,'NetworkRole','server');
tcpip_server.InputBuffersize=100000;%同理,接收端也要設置個緩沖區才能存下發過來的數據。
fopen(tcpip_server); %打開服務器,直到建立一個TCP連接才返回;
tcpip_server.BytesAvailable%如果收到了發過來的數據,這個就是可以讀取出的數據數量,比如上面的9個數值數據,每個數據占用8個字節,則總共會有72個字節,那么此時這個數就是72。如果沒有讀到,返回0
data= fread(tcpip_server,tcpip_server.BytesAvailable/8,'double') %讀取數據。	參數’tcpip_server.BytesAvailable/8‘代表着讀取幾個數據,由上文知道共有72字節的數據,那么就有72/8個數據了,全部都讀取。
fclose(tcpip_server);	

上文中只是演示了用fread()和fwrite()函數發送整形類的數值數據,要是想發送字符串等文本類型的數據的話,可以用fprintf()和fscanf()函數

上面也只是簡單的說明了一下如何實現TCP/IP通信,此時除了用上面的方法之外,還可以只在一台電腦上測試,只要打開兩個Matlab分別運行這兩段程序就好(注意IP),或者下載個網絡調試助手,讓網絡調試助手當作客戶端/服務端,matlab中運行服務端/客戶端實現通信。

此外,兩台電腦之間的TCP/IP通信也可以僅僅用一根網線來實現,只要用一根網線連接兩台電腦的網口(此時不用聯網,連到同一局域網下),然后找到相對應的IP地址就可以用上面的辦法實現通信了。

參考:Matlab幫助文檔:創建TCP/IP連接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM