【通讯】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连接

posted @ 2020-10-16 12:00  LENMOD  阅读(6204)  评论(0编辑  收藏  举报