基本说明
数据以UDP或TCP协议为基础,当使用TCP格式是,要先发4个字节的数据长度(大端模式),数据使用大段模式,高字节在前,
帧长度(n) | 帧内容 |
---|---|
4个字节 | n个字节 |
数据基本格式
请求格式
数据内容 | 数据说明 | 长度 |
---|---|---|
XID | 随机数,应答与发送方必须一致 | 4 |
协议版本 | 暂时只使用 1 | 4 |
消息类型 | 常用类型 1,建立连接 | 4 |
过程编号 | 也可以称为功能编号 | 4 |
数据内容 | 请求的参数 | 帧长度-16 |
C语言描述
struct rpc_call_msg {
unsigned int xid;
unsigned int rpcvers;
unsigned int prog;
unsigned int vers;
unsigned int proc;
opaque_auth cred;
opaque_auth verf;
/* procedure specific parameters start here */
}
··· C#
MemoryStream ms=new MemoryStream();
XdrHelper.Write(ms,Xid);
XdrHelper.Write(ms,MessType);
XdrHelper.Write(ms,RpcVersion);
XdrHelper.Write(ms,Id);
XdrHelper.Write(ms,Ver);
XdrHelper.Write(ms,ProcedureId);
byte[] credentialsBytes = Credentials.ToBytes();
ms.Write(credentialsBytes,0,credentialsBytes.Length);
byte[] verifierBytes = Verifier.ToBytes();
ms.Write(verifierBytes, 0, verifierBytes.Length);
Procedure.WriteToStream(ms);
return ms.ToArray();
···
应答帧格式
C语言描述
struct rpc_rmsg {
unsigned int xid;
unsigned int rpcvers;
unsigned int prog;
unsigned int vers;
unsigned int proc;
opaque_auth cred;
opaque_auth verf;
/* procedure specific parameters start here */
}
# 具体协议
## 建立连接
发送数据
| 数据内容 |值 |长度|
|--|--|--|
| XID | 随机数,应答与发送方必须一致 |4|
|消息类型,|1|4|
|协议版本,|1 |4|
|过程编号|10|4|
|数据内容| 帧长度-16|
接收数据
| 数据内容 |值 |长度|
|--|--|--|
| XID | 应答,与请求方必须一致 |4|
|消息类型,|1|4|
|协议版本,|1 |4|
|过程编号|10|4|
|数据内容| 帧长度-16|