创建 TCP/IP 服务器
对象表示从指定的 IP 地址和端口号接收 TCP/IP 客户端连接请求并接受该请求的 TCP/IP 服务器。服务器建立连接后,可以使用读取和写入功能从客户端接收数据以及将数据发送到客户端。每个对象一次仅支持一个客户端连接。tcpserver
tcpserver
t = tcpserver(address,port)
t = tcpserver(port)
t = tcpserver(___,Name,Value)
t = tcpserver(地址,端口)`创建一个 TCP/IP 服务器,该服务器在 指定的 IP 地址和 指定的端口号处侦听 TCP/IP 客户端连接请求。`address``port
输入参数设置属性,输入参数设置属性。address
ServerAddress
port
ServerPort
t = tcpserver(port)` 创建一个 TCP/IP 服务器,该服务器在端口号和 IP 地址处侦听客户端连接请求。此 IP 地址表示服务器接受来自计算机上任何有效 IP 地址的客户端连接。`port``"::"
t = tcpserver(___,Name,Value)` 创建一个 TCP/IP 服务器,并使用一个或多个名称-值对参数设置其他[属性](https://ww2.mathworks.cn/help/releases/R2021b/instrument/tcpserver.html#mw_3b2cfca9-68b5-493d-beeb-953e85480aab)。使用名称-值对参数设置 、 和 属性。在上述语法中的任何输入参数组合之后,将每个属性名称括在引号中,后跟属性值。`Timeout``ByteOrder``ConnectionChangedFcn
例如,创建一个 TCP/IP 服务器,该服务器侦听 IP 地址处的端口上的连接。它将超时周期设置为 20 秒,将字节顺序设置为大端。t = tcpserver(4000,"Timeout",20,"ByteOrder","big-endian")
4000
"::"
[全部折叠](javascript:void(0)😉
ServerAddress
— 服务器侦听 “::”
(默认)|的 IP 地址字符向量|字符串标量服务器侦听 TCP/IP 客户端连接的 IP 地址,指定为字符向量或字符串标量。可以将此属性设置为计算机的任何有效 IPV4 地址、IPV6 地址或主机名。只能在创建对象时设置此属性。
**示例:**侦听端口 4000 和 IP 地址 144.212.100.10 处的连接。t = tcpserver("144.212.100.10",4000)
注意
如果在创建对象时指定主机名,则会将其解析为 IPV4 或 IPV6 地址并设置为解析的 IP 地址。tcpserver
ServerAddress
数据类型: |char
string
ServerPort
— 服务器侦听数字的 端口号服务器侦听 TCP/IP 客户端连接的端口号,指定为介于 1 和 65535 之间的数字(包括 1 和 65535)。只能在创建对象时设置此属性。
**示例:**侦听端口 4000 和 IP 地址 144.212.100.10 处的连接。t = tcpserver("144.212.100.10",4000)
数据类型:double
Timeout
— 允许的时间完成读写操作 10(缺省值)|数值的允许以秒为单位完成读取和写入操作的时间,指定为数值。在创建对象时使用名称-值对参数设置此属性。您也可以在创建对象后使用点表示法对其进行更改。
**示例:**将读/写超时期限设置为 20 秒。t = tcpserver("144.212.100.10",4000,"Timeout",20)
数据类型:double
ByteOrder
— 字节 的顺序“小端”
(默认)|“大端”
按顺序排列字节为较大的数值,指定为 或 。这仅适用于以下数值数据类型:、、、、和 。在创建对象时使用名称-值对参数设置此属性。您也可以在创建对象后使用点表示法对其进行更改。"little-endian"
"big-endian"
uint16
int16
uint32
int32
uint64
int64
single
double
**示例:**将字节顺序设置为大端序。t = tcpserver("144.212.100.10",4000,"ByteOrder","big-endian")
数据类型: |char
string
ConnectionChangedFcn
— 由连接或断开连接事件 函数句柄触发的回调函数由连接或断开连接事件触发的回调函数,指定为函数句柄。当 TCP/IP 客户端连接到服务器或从服务器断开连接时,将发生连接或断开连接事件。在创建对象时使用名称-值对参数设置此属性。您也可以在创建对象后使用点表示法对其进行更改。在分配函数句柄之前,此属性为空。
**示例:**将连接回调函数设置为 。当客户端连接或断开连接时,将触发。t = tcpserver("144.212.100.10",4000,"ConnectionChangedFcn",@myConnectionFcn)
myConnectionFcn
myConnectionFcn
数据类型:function_handle
Connected
— 服务器连接状态 为false
或 0
(默认)|true
或 1
此属性是只读的。
服务器连接状态,以数字或逻辑 () 或 () 的形式返回。如果此属性的值为 ,则 TCP/IP 客户端连接到服务器。1
true
0
false
true
一次只能连接到一个客户端。如果一个客户端与服务器断开连接,您可以立即连接到另一个客户端。
数据类型:logical
ClientAddress
— 已连接客户端 “”
(默认)的 IP 地址|字符串标量此属性是只读的。
已连接客户端的 IP 地址,以字符串形式返回。此属性的值与客户端的 IP 地址匹配。此属性的值为空,直到 TCP/IP 客户端建立与服务器的连接。如果客户端与服务器断开连接,则此属性的值将变为空。
**示例:**返回已连接客户端的 IP 地址。t.ClientAddress
数据类型:string
ClientPort
— 已连接客户端 的端口号 []
(默认)|数值的此属性是只读的。
已连接客户端的端口号,以双精度形式返回。此属性的值为空,直到 TCP/IP 客户端建立与服务器的连接。
**示例:**返回已连接客户端的端口号。t.ClientPort
数据类型:double
Terminator
— 数据 “LF”
(默认)|的终止符字符“CR”
|“CR/LF”
|0 到 255用于读取和写入 ASCII 终止数据的终止符字符,以 、 、 或 0 到 255 之间的数字整数(包括 0 和 255)的形式返回。如果读取和写入终止符不同,则作为这些值的 1x2 单元格数组返回。使用配置终端程序
函数设置此属性。"LF"
"CR"
"CR/LF"
Terminator
**示例:**将读取和写入终止符都设置为 。configureTerminator(t,"CR")
"CR"
**示例:**将读取终止符设置为 ,将写终止符设置为 。configureTerminator(t,"CR",10)
"CR"
10
数据类型: | |double
char
string
NumBytesAvailable
— 可读取 0 的字节数(默认)|数值的此属性是只读的。
可读取的字节数,以数值形式返回。
**示例:**返回可供读取的字节数。t.NumBytesAvailable
数据类型:double
NumBytesWritten
— 写入 的总字节数 0(默认值)|数值的此属性是只读的。
写入的总字节数,以数值形式返回。当客户端断开连接或重新连接到服务器时,此属性的值不会重置为 0。
**示例:**返回写入的字节数。t.NumBytesWritten
数据类型:double
BytesAvailableFcnMode
— 字节可用回调触发模式 “关闭”
(默认)|字节可用回调触发模式,以 、 或 的形式返回。此设置确定回调是关闭的、是由 指定的字节数触发的,还是由 指定的终止符触发的。使用 configureCallback
函数设置此属性。"off"
"byte"
"terminator"
BytesAvailableFcnCount
Terminator
**示例:**将回调设置为每次有 50 个字节的新数据可供读取时触发。configureCallback(t,"byte",50,@callbackFcn)``callbackFcn
**示例:**将回调设置为在终止符可供读取时触发。configureCallback(t,"terminator",@callbackFcn)``callbackFcn
**示例:**关闭回调。configureCallback(t,"off")
数据类型: |char
string
BytesAvailableFcnCount
— 触发回 调的数据字节数 64(默认)|数值的触发 由 指定的回调的数据字节数,以双精度形式返回。仅当属性为 时,才使用此值。使用 configureCallback
函数设置这些属性。BytesAvailableFcn
BytesAvailableFcnMode
"byte"
**示例:**将回调设置为每次有 50 个字节的新数据可供读取时触发。configureCallback(t,"byte",50,@callbackFcn)
callbackFcn
数据类型:double
BytesAvailableFcn
— 回调函数由字节触发可用事件 函数句柄由字节可用事件触发的回调函数,作为函数句柄返回。字节可用事件是通过接收一定数量的字节或终止符生成的。在分配函数句柄之前,此属性为空。使用 configureCallback
函数设置此属性。
**示例:**将回调设置为每次有 50 个字节的新数据可供读取时触发。configureCallback(t,"byte",50,@callbackFcn)
callbackFcn
数据类型:function_handle
ErrorOccurredFcn
— 由错误事件 函数句柄触发的回调函数由错误事件触发的回调函数,作为函数句柄返回。当服务器的网络连接中断或丢失时,将生成错误事件。在分配函数句柄之前,此属性为空。
例: t.ErrorOccurredFcn = @myErrorFcn
数据类型:function_handle
UserData
— 任何类型的用户数据的 通用属性用户数据的通用属性,作为任何 MATLAB 数据类型返回。例如,可以使用此属性来存储来自回调函数的数据。®
例: t.UserData
read | 读取发送到 TCP/IP 服务器的数据 |
---|---|
readline | 读取发送到 TCP/IP 服务器的 ASCII 字符串数据行 |
readbinblock | 读取发送到 TCP/IP 服务器的一个数据箱块 |
write | 从 TCP/IP 服务器写入数据 |
writeline | 从 TCP/IP 服务器写入 ASCII 数据行 |
writebinblock | 从 TCP/IP 服务器写入一个数据箱块 |
configureTerminator | 用于 ASCII 字符串通信的设置终止符 |
configureCallback | 设置通信回调函数和触发条件 |
flush | 清除缓冲区以使用 TCP/IP 服务器进行通信 |
[全部折叠](javascript:void(0)😉
复制命令复制代码
创建一个名为 TCP/IP 服务器,用于侦听计算机的 IP 地址和端口 4000 处的连接。您的 IP 地址与此示例中的 IP 地址不同。它必须是计算机上适配器的任何有效 IPV4 地址、IPV6 地址或主机名。t
t = tcpserver("172.28.200.145",4000)
t =
TCPServer with properties:
ServerAddress: "172.28.200.145"
ServerPort: 4000
Connected: 0
ClientAddress: ""
ClientPort: []
NumBytesAvailable: 0
Show all properties, functions
、 和 属性的值指示 TCP/IP 客户端未连接到服务器。Connected
ClientAddress
ClientPort
复制命令复制代码
创建一个名为 TCP/IP 服务器,该服务器侦听所有 IP 地址和端口 4000 上的连接。t
t = tcpserver(4000)
t =
TCPServer with properties:
ServerAddress: "::"
ServerPort: 4000
Connected: 0
ClientAddress: ""
ClientPort: []
NumBytesAvailable: 0
Show all properties, functions
、 和 属性的值指示 TCP/IP 客户端未连接到服务器。Connected
ClientAddress
ClientPort
复制命令复制代码
创建调用的 TCP/IP 服务器,并将读写超时期限设置为 20 秒。t
t = tcpserver(4000,"Timeout",20)
t =
TCPServer with properties:
ServerAddress: "::"
ServerPort: 4000
Connected: 0
ClientAddress: ""
ClientPort: []
NumBytesAvailable: 0
Show all properties, functions
显示 的值。Timeout
t.Timeout
ans = 20
输出显示指定的超时值,指示等待最多 20 秒才能完成读取或写入操作。t
复制命令复制代码
创建一个调用的回调函数,并将其另存为当前工作目录中的文件。调用此回调函数时,它会在 MATLAB 命令窗口中显示一条消息,指示连接或断开连接。您可以修改此代码以在 TCP/IP 服务器上执行读取或写入操作,而不是显示消息。connectionFcn
.m
function connectionFcn(src,~)
if src.Connected
disp("This message is sent by the server after accepting the client connection request.")
else
disp("Client has disconnected.")
end
end
创建调用的 TCP/IP 服务器,并将该属性设置为回调函数的句柄。server
ConnectionChangedFcn
connectionFcn
server = tcpserver("localhost",4000,"ConnectionChangedFcn",@connectionFcn)
server =
TCPServer with properties:
ServerAddress: "127.0.0.1"
ServerPort: 4000
Connected: 0
ClientAddress: ""
ClientPort: []
NumBytesAvailable: 0
Show all properties, functions
创建一个 TCP/IP 客户端,调用该客户端的 IP 地址和端口号与服务器相同。client
client = tcpclient("localhost",4000)
client =
tcpclient with properties:
Address: 'localhost'
Port: 4000
NumBytesAvailable: 0
Show all properties, functions
This message is sent by the server after accepting the client connection request.
创建客户端后,它将连接到服务器。这将触发服务器的连接事件,该事件将调用回调函数。回调函数返回您在命令窗口中看到的消息。connectionFcn
通过清除客户端来断开客户端与服务器的连接。
clear client
Client has disconnected.
清除客户端会触发服务器的断开连接事件,并从回调函数返回消息。connectionFcn
复制命令复制代码
创建在指定端口和 IP 地址侦听客户端连接请求的 TCP/IP 服务器。然后,将数据从服务器写入连接的客户端。
创建侦听端口 4000 和端口 4000 上的连接的 TCP/IP 服务器。localhost
server = tcpserver("localhost",4000)
server =
TCPServer with properties:
ServerAddress: "127.0.0.1"
ServerPort: 4000
Connected: 0
ClientAddress: ""
ClientPort: []
NumBytesAvailable: 0
Show all properties, functions
使用 创建 TCP/IP 客户端以连接到服务器对象。必须指定用于创建 的相同 IP 地址和端口号。tcpclient
server
client = tcpclient("localhost",4000)
client =
tcpclient with properties:
Address: 'localhost'
Port: 4000
NumBytesAvailable: 0
Show all properties, functions
请参见 的 、 和 属性的值。Connected
ClientAddress
ClientPort
server
server
server =
TCPServer with properties:
ServerAddress: "127.0.0.1"
ServerPort: 4000
Connected: 1
ClientAddress: "127.0.0.1"
ClientPort: 65136
NumBytesAvailable: 0
Show all properties, functions
输出显示 已成功接受来自 的请求,并建立与 的连接。server
client
client
server
通过使用对象写入数据将数据发送到客户端。由于客户端已连接到服务器,因此此数据在客户端中可用。从对象中读取此数据。server
client
write(server,"hello world","string")
read(client,11,"string")
ans =
"hello world"
复制命令复制代码
创建在指定端口和 IP 地址侦听客户端连接请求的 TCP/IP 服务器。然后读取从连接的客户端发送到服务器的数据。
创建侦听端口 4000 和端口 4000 上的连接的 TCP/IP 服务器。localhost
server = tcpserver("localhost",4000)
server =
TCPServer with properties:
ServerAddress: "127.0.0.1"
ServerPort: 4000
Connected: 0
ClientAddress: ""
ClientPort: []
NumBytesAvailable: 0
Show all properties, functions
使用 创建 TCP/IP 客户端以连接到服务器对象。必须指定用于创建 的相同 IP 地址和端口号。tcpclient
server
client = tcpclient("localhost",4000)
client =
tcpclient with properties:
Address: 'localhost'
Port: 4000
NumBytesAvailable: 0
Show all properties, functions
显示 的 、 和 属性的值。Connected
ClientAddress
ClientPort
server
server
server =
TCPServer with properties:
ServerAddress: "127.0.0.1"
ServerPort: 4000
Connected: 1
ClientAddress: "127.0.0.1"
ClientPort: 65440
NumBytesAvailable: 0
Show all properties, functions
输出显示 已成功接受来自 的请求,并建立与 的连接。server
client
client
server
将数据写入 TCP/IP 客户端。由于客户端已连接到服务器,因此此数据在服务器中可用。使用对象读取字符串数据的前五个值。server
write(client,"helloworld","string")
read(server,5,"string")
ans =
"hello"
如果再读取五个值,则会收到剩余的字符串数据。
read(server,5,"string")
ans =
"world"