主要内容

MATLAB中TCP/IP客户端和服务器之间的通信

方法的使用tcpserver而且tcpclient函数,在MATLAB中创建TCP/IP客户端和TCP/IP服务器®然后通过TCP/IP协议在它们之间发送数据。你可以用三种不同的方式运行这个例子:

  • 在一个MATLAB会话中。

  • 在同一台计算机上的两个MATLAB会话之间。

  • 在属于同一子网的不同计算机上的两个MATLAB会话之间。

要在单个MATLAB会话中运行此示例,不需要进行任何修改。在同一个MATLAB会话中创建服务器和客户端。

要在同一台计算机或两台不同计算机上的两个不同的MATLAB会话中运行此示例,必须在每个MATLAB会话中运行指定的部分。复制服务器会话而且回调函数节到一个MATLAB脚本在第一个MATLAB会话。复制客户端会话节到另一个MATLAB脚本在第二个MATLAB会话。运行服务器会话脚本,然后运行客户端会话脚本,因为必须在客户机尝试连接到服务器之前创建服务器。

当使用两个MATLAB会话时,复制的值服务器。ServerAddress而且服务器。ServerPort服务器会话用它们作为地址而且港口用于创建tcpclient对象中的客户端会话

服务器会话

在此会话中,创建一个tcpserver对象监听客户端连接请求。它在客户端连接到它之后发送数据。方法启用的回调功能configureCallback方法读取客户端发送的数据。

查找主机名和地址

找到创建服务器的机器的主机名和地址。客户端使用此地址连接到服务器。

[~,hostname] = system(的主机名);Hostname = string(strtrim(Hostname));地址= resolvehost(主机名,“地址”);

创建服务器

创建tcpserver对象使用计算机地址和端口5000。创建一个回调函数connectionFcn在TCP/IP客户端连接到服务器时写入数据。设置ConnectionChangedFcn属性设置为回调函数connectionFcn.你可以在connectionFcn函数在本例的末尾。

服务器= tcpserver(地址,5000,“ConnectionChangedFcn”@connectionFcn)
server = TCPServer with properties: ServerAddress: "172.28.200.248" ServerPort: 5000 Connected: 0 ClientAddress: "" ClientPort: [] NumBytesAvailable: 0显示所有属性,函数

使用字节回调模式读取二进制数据

创建一个回调函数readDataFcn每次在指定字节的数据可用时读取数据。读取的数据存储在用户数据的属性tcpserver对象。你可以在readDataFcn函数在本例的末尾。

将回调函数设置为每次接收7688字节的数据时触发。

configureCallback(服务器,“字节”, 7688年,@readDataFcn);

客户端会话

在此会话中,创建一个tcpclient对象连接到服务器。客户端读取服务器发送的数据。然后,它将读到的数据发送回服务器。

创建客户端

创建一个tcpclient实例,并将超时设置为5秒。

当使用两个MATLAB会话时,复制的值服务器。ServerAddress而且服务器。ServerPort服务器会话用它们作为地址而且港口用于创建tcpclient对象。

client = tcpclient(server.ServerAddress,server.ServerPort,“超时”5)
client = tcpclient with properties:地址:'172.28.200.248'端口:5000 NumBytesAvailable: 0显示所有属性,函数
暂停(1);

读取数据和显示

读取服务器发送的数据。重塑数据数组并绘制它。

rawData = read(客户端,961,“替身”);重塑(rawData,31,31);冲浪(reshapedData);

写入数据

向服务器写入数据。

写(客户端、rawData“替身”);

清除客户端

清除tcpclient实例。

清晰的客户端

回调函数

写入二进制数据的连接回调函数

这个函数调用将数据写入连接的TCP/IP客户端。

函数connectionFcn (src, ~)如果src。连接disp ("客户端连接已被服务器接受。")数据=膜(1);写(src、数据(:)“替身”);结束结束

读取二进制数据的数据可用回调函数

这个函数调用阅读BytesAvailableFcnCount数据的字节数。

函数readDataFcn(src, ~)“从客户端接收到数据。”src。UserData = read(src,src。BytesAvailableFcnCount/8,“替身”);reshapedServerData =重塑(src.UserData,31,31);冲浪(reshapedServerData);结束