命令码与命令附加码
命令码
|
命令附加码
|
功
能
|
注
释
|
发送方
|
01h
|
N/A
|
联机查询
|
|
上位机
|
01h
|
传感器状态查询
|
|
01h
|
00h
|
联机查询响应
|
00h
表示成功
|
在线采集器
|
ChSum
Ch
1
Stat
1
…Ch
i
Stat
i
…Ch
n
|
上传传感器状态
|
Stat
:为线采集器的通道传感器状态,
00
表示正常,
01
表示未接信号,
02
表示异常
|
实例:
上位机
à
FF FF 03 00 00 00 01 01 05
FF FF
:
起始
03 00 00 00
:
字节数
01
:
版本号
01
:
命令码
是否连接
05
:
验证码
查询在线采集器是否在线
在线采集器
à
FF FF 04 00 00 00 01 01 00 06
FF FF
:
起始
04 00 00 00
:
字节数
01
:
版本号
01
:
命令码 是否连接
00
:
正常
06 : 验证码
code: emo.c:
让我困惑一个星期, 哎........., 终于做出来.
#include <windows.h>
#include <iostream>
#pragma comment(lib, "ws2_32")
using namespace std;
#define LEN 1024
int main()
{
int i=0;
char buf[LEN] = {0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07};
int len;
WORD wdVersionRequired;
WSADATA wsaData;
wdVersionRequired = MAKEWORD(2, 2); /* 2.2版本 */
WSAStartup(wdVersionRequired, &wsaData);
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
if (SOCKET_ERROR == s)
{
return 0;
}
sockaddr_in saServer;
memset(&saServer, 0, sizeof(saServer));
saServer.sin_family = AF_INET;
saServer.sin_addr.s_addr = inet_addr("192.168.1.14");
saServer.sin_port = htons(8001);
if(connect(s, (const sockaddr*)&saServer, sizeof(sockaddr)) != 0)
{
perror("error");
exit(-1);
}
do {
/* 9 bytes */
if(send(s, buf, 9, 0) <= 0) //send server
{
perror("error");
break;
}
printf("发送成功.\n");
/* 如果 server 关闭, 就退出 */
if ((len=recv(s, buf, sizeof(buf), 0)) <= 0)
{
perror("error");
break;
}
printf("接收到 %d bytes.\n", len);
/* 逐字节输出, 注意这里必须转换成 "无符号"字符型 */
for (i=0; i<len; i++) {
printf("%02X ", *(unsigned char *)(buf+i));
}
printf("\n", len);
} while (0);
WSACleanup();
closesocket(s);
return 1;
}