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);结束