|
- #include "common.h"
-
- /*********************************************************************************************
- * 功能 : 检测socket版本
- * 描述 : 检测socket版本是否一致
- * 输入 : 无
- * 输出 : true socket版本一致
- * false socket版本不一致
- *********************************************************************************************/
- bool InitSocket_Version(void)
- {
- WORD sockVersion = MAKEWORD(2, 2);//使用winsocket2.2版本
- WSADATA wsaData;
- if (WSAStartup(sockVersion, &wsaData) != 0)
- {
- return false;
- }
- return true;
- }
-
- /*********************************************************************************************
- * 功能 : IP地址有效性检测
- * 描述 : 检测输入的IP地址是否合法
- * 输入 : IP 输入的IP地址
- * 输出 : true IP地址合法
- * false IP地址非法
- *********************************************************************************************/
- bool Check_IP(string IP)
- {
- int s[4];
- string ip = IP;
- if (ip.length() < 7 || ip.length() > 15) //长度判定
- return false;
- if (sscanf_s(IP.c_str(), "%d.%d.%d.%d", &s[0], &s[1], &s[2], &s[3]) != 4) //IPV4格式正确
- {
- return false;
- }
- string newip = to_string(s[0]) + "." + to_string(s[1]) + "." + to_string(s[2]) + "." + to_string(s[3]);
- if (ip != newip) //前导0
- return false;
- if ((s[0] & 0xffffff00) || (s[1] & 0xffffff00) || (s[2] & 0xffffff00) || (s[3] & 0xffffff00)) //判断每一段大小是否符合要求
- {
- return false;
- }
- return true;
- }
-
- /*********************************************************************************************
- * 功能 : 获取从站IP地址和端口号
- * 描述 : 终端输入从站IP地址和端口号
- * 输入 : IP 地址 (IPV4)
- * *Port_number 端口号(1-65535)
- * 输出 : 无
- *********************************************************************************************/
- void Input_IP(string& IP, unsigned int *Port_number)
- {
- int i = 1;
- do
- {
- if (i == 1)
- {
- cout << "请输入从站IP:";
- i = 0;
- }
- else
- cout << "IP地址格式不正确,请重新输入从站IP:";
- cin >> IP;
- } while (!Check_IP(IP));
-
- i = 1;
- cout << "IP地址输格式入正确,请输入从站端口号:";
- do
- {
- if (i != 1)
- cout << "请重新输入从站端口号:";
- cin >> *Port_number;
- i = 0;
- } while (*Port_number == 0 || *Port_number > 65535); //端口不能为0 ,端口号范围0---65535
-
- }
-
- /*********************************************************************************************
- * 功能 : 选择功能码
- * 描述 : 在功能码 0x01 0x03 0x0F 0x10中选择一个功能码
- * 输入 : 无
- * 输出 : Function_code 选择的功能码
- *********************************************************************************************/
- int Input_Function_code(void)
- {
- int Function_code;
- cin >> hex;
- int i = 1;
- printf("功能码 : 0x01 0x03 0x0F 0x10 \n");
- printf("说明 : 读线圈 读寄存器 写多个线圈 写多个寄存器\n");
- do
- {
- if (i == 1)
- {
- i = 0;
- cout << "请输入选择的功能码:";
- }
- else
- cout << "输入功能码错误,请重新选择的功能码";
- cin >> Function_code;
- cin.clear();
- cin.sync();
- } while (Function_code != 0x01 && Function_code != 0x03 && Function_code != 0x0F && Function_code != 0x10);
- return Function_code;
- }
-
- /*********************************************************************************************
- * 功能 : 输入操作起始地址码
- * 描述 : 起始地址码,最大值65535
- * 输入 : 无
- * 输出 : Starting_address 操作起始地址码
- *********************************************************************************************/
- unsigned int Input_Starting_address(void)
- {
- unsigned int Starting_address;
- int i = 1;
- printf("请输入操作(十进制)起始地址 \n");
- do
- {
- if (i == 1)
- {
- i = 0;
- cout << "请输入操作(十进制)起始地址:";
- }
- else
- cout << "请重新输入操作(十进制)起始地址";
- cin >> Starting_address;
- cin.clear();
- cin.sync();
- } while (Starting_address > 65535 || Starting_address < 0);
- return Starting_address;
- }
-
- /*********************************************************************************************
- * 功能 : 输入操作数量
- * 描述 : 操作数量,0x01 1-200 0x03 1-125 0x0xF 1-1968 0x10 1-123
- * 输入 : Function_code 选择的功能码类型
- * 输出 : Operations_Number 对应功能码类型的操作数量
- *********************************************************************************************/
- unsigned int Input_Operations_Number(int Function_code)
- {
- unsigned int Operations_Number;
- int i = 1;
- bool flage = true;
- printf(" 功能码 0x01 0x03 0x0F 0x10\n");
- printf("操作数量 1-2000 1-125 1-1968 1-123\n");
- do
- {
- if (i == 1)
- {
- i = 0;
- cout << "请输入操作(十进制)数量:";
- }
- else
- cout << "请重新输入操作(十进制)数量";
- cin >> Operations_Number;
- cin.clear();
- cin.sync();
- if (Function_code == 0x01 && Operations_Number >= 1 && Operations_Number <= 2000)
- flage = false;
- if (Function_code == 0x03 && Operations_Number >= 1 && Operations_Number <= 125)
- flage = false;
- if (Function_code == 0x0F && Operations_Number >= 1 && Operations_Number <= 1968)
- flage = false;
- if (Function_code == 0x10 && Operations_Number >= 1 && Operations_Number <= 123)
- flage = false;
- } while (flage);
- return Operations_Number;
- }
|