From 7724d0aa988ea0f20d6632d5fa542f9067b83b62 Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 15 Nov 2023 15:05:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DLinux=E4=B8=8A=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 7 +- Inifile.cpp | 33 ++--- Profile_Hash.cpp | 35 ++--- Profile_Hash.h | 6 +- baohua.h | 2 + basefunc.cpp | 15 +++ basefunc.h | 5 + basetype.h | 6 +- buban103.cpp | 12 +- common.h | 12 +- commport.cpp | 28 +++- config.ini | 46 +++---- display.cpp | 9 +- inifile.h | 30 ++--- netport.cpp | 275 +++++++++++++++++++++++----------------- os_heap.cpp | 4 +- platform_def.h | 5 +- tcphost.cpp | 4 +- udpcomm.h | 15 ++- widgets.cpp | 5 +- widgets.vcxproj | 5 +- widgets.vcxproj.filters | 9 -- 22 files changed, 340 insertions(+), 228 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 07d2499..f39ce03 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,7 @@ set(CMAKE_CXX_FLAGS_DEBUG "-g") project ("iec103") set_property( GLOBAL PROPERTY CXX_STANDARD 11) +add_definitions(-DOS_UNIX) # Add source to this project's executable. add_executable (iec103 basefunc.cpp @@ -31,9 +32,9 @@ add_executable (iec103 basefunc.cpp os_heap.cpp Profile_Hash.cpp scadaprotect.cpp - tcphost.cpp - udpcomm.cpp - udpping.cpp + # tcphost.cpp + # udpcomm.cpp + # udpping.cpp widgets.cpp) # set(THREADS_PREFER_PTHREAD_FLAG ON) diff --git a/Inifile.cpp b/Inifile.cpp index 8e3c934..5c206b9 100644 --- a/Inifile.cpp +++ b/Inifile.cpp @@ -74,8 +74,9 @@ #include "string.h" #include "stdio.h" -#include "inifile.h" #include "common.h" +#include "inifile.h" +#include //#include /*------------------------------------------------------------------------------------- 平台无关的INI文件读函数(字符串),和同类API相比,只是参数类型从const char*变成char* @@ -83,14 +84,14 @@ 了读取成功与否标志(int类型),但并不影响使用 -------------------------------------------------------------------------------------*/ int QGetPrivateProfileString( - char* lpszSectionName, //段名 - char* lpszKeyName, //键名 - char* lpszDefault, //缺省字符串 + const char* lpszSectionName, //段名 + const char* lpszKeyName, //键名 + const char* lpszDefault, //缺省字符串 char* lpszReturnedString, //结果字符串 u_32 nSize, //结果字符串长度 - char* lpszFileName, //ini文件名 - char* lpszRemarkInLineStr, //行内注释符 - char chContinueLineChar //续行符号 + const char* lpszFileName, //ini文件名 + const char* lpszRemarkInLineStr, //行内注释符 + const char chContinueLineChar //续行符号 ) { FILE* IniFile = NULL; @@ -367,12 +368,12 @@ func_end: 返回值类型从UINT改成int -------------------------------------------------------------------------------------*/ int QGetPrivateProfileInt( - char* lpszSectionName, //段名 - char* lpszKeyName, //键名 + const char* lpszSectionName, //段名 + const char* lpszKeyName, //键名 int nDefault, //缺省值 - char* lpszFileName, //ini文件名 - char* lpszRemarkInLineStr, //行内注释符 - char chContinueLineChar //续行符号 + const char* lpszFileName, //ini文件名 + const char* lpszRemarkInLineStr, //行内注释符 + const char chContinueLineChar //续行符号 ) { int iRet, iResult; @@ -425,10 +426,10 @@ int QGetPrivateProfileInt( 目前该函数尚未对段搜索部分进行优化 -------------------------------------------------------------------------------------*/ BOOL QWritePrivateProfileString( - char* lpszSectionName, //段名 - char* lpszKeyName, //键名 - char* lpszString, //要写入的字符串 - char* lpszFileName //INI文件名 + const char* lpszSectionName, //段名 + const char* lpszKeyName, //键名 + const char* lpszString, //要写入的字符串 + const char* lpszFileName //INI文件名 ) { FILE* IniFile; diff --git a/Profile_Hash.cpp b/Profile_Hash.cpp index e0ec191..12310f2 100644 --- a/Profile_Hash.cpp +++ b/Profile_Hash.cpp @@ -107,11 +107,14 @@ //#include // #include #include +#include +#include #endif #include "Profile_Hash.h" #include "confrw_errno.h" //#include "util.h" - +#include "common.h" +#include "basefunc.h" //定义句柄记录数组 static SProfileHanleInfo g_pHandleIndex[MAX_PROFILEHANDLE_NUM]; @@ -233,7 +236,7 @@ pgc32 profile_search_sequence ( SItemInCache **pindex_base, { //以下执行大小写转换 #ifdef OS_WINDOWS - lstrcpyn(index.szSecName, szSecName, MAX_CHAR_LINE); + lstrcpyn((LPWSTR)index.szSecName, (LPCWSTR)szSecName, MAX_CHAR_LINE); // strupr(index.szSecName); #else strncpy(index.szSecName, szSecName, MAX_CHAR_LINE - 1); @@ -243,7 +246,7 @@ pgc32 profile_search_sequence ( SItemInCache **pindex_base, if (szItemName != NULL) { #ifdef OS_WINDOWS - lstrcpyn(index.szItemName, szItemName, MAX_CHAR_LINE); + lstrcpyn((LPWSTR)index.szItemName, (LPCWSTR)szItemName, MAX_CHAR_LINE); // strupr(index.szItemName); #else strncpy(index.szItemName, szItemName, MAX_CHAR_LINE - 1); @@ -274,7 +277,7 @@ static u32 fnhash_index_of(const void * pKey, u32 hash_size) memcpy(&sindex, pindex, sizeof(SItemInCache)); //以下执行大小写转换 -#ifdef OS_WINDOWS +#ifndef OS_WINDOWS strupr(sindex.szSecName); strupr(sindex.szItemName); #else @@ -494,7 +497,7 @@ PGCBOOL DigItemContent( pgcchar *szString, pgcchar *szItemName, pgcchar *szItemV //获取项目值 memset(szTemp, 0, MAX_CHAR_LINE); #ifdef OS_WINDOWS - lstrcpyn(szTemp, pcBeval + 1, MAX_CHAR_LINE); + lstrcpyn((LPWSTR)szTemp, (LPCWSTR)pcBeval + 1, MAX_CHAR_LINE); #else strncpy(szTemp ,pcBeval + 1, MAX_CHAR_LINE - 1); #endif @@ -952,11 +955,11 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) memset(szProfileName, 0, MAX_PATH_NUM); //保存文件全路径名 -//#ifdef OS_WINDOWS +#ifdef OS_WINDOWS lstrcpyn((LPWSTR)szProfileName, (LPWSTR)g_pHandleIndex[hProfile].szPathName, MAX_PATH_NUM); -/*#else +#else strncpy(szProfileName, g_pHandleIndex[hProfile].szPathName, MAX_PATH_NUM - 1); -#endif*/ +#endif memset(&g_pHandleIndex[hProfile], 0, sizeof(SProfileHanleInfo)); //#ifdef OS_WINDOWS @@ -1294,7 +1297,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) fclose(fstream); //保存文件全路径名 #ifdef OS_WINDOWS - lstrcpyn(g_pHandleIndex[hProfile].szPathName, szProfileName, MAX_PATH_NUM); + lstrcpyn((LPWSTR)g_pHandleIndex[hProfile].szPathName, (LPCWSTR)szProfileName, MAX_PATH_NUM); #else strncpy(g_pHandleIndex[hProfile].szPathName, szProfileName, MAX_PATH_NUM - 1); #endif @@ -1357,11 +1360,11 @@ int create_profile_cache(pgcchar *szProfileName, int *phfile) } //保存文件全路径名 -//#ifdef OS_WINDOWS +#ifdef OS_WINDOWS lstrcpyn((LPWSTR)g_pHandleIndex[hCurCacher].szPathName, (LPWSTR)szProfileName, MAX_PATH_NUM); -/*#else +#else strncpy(g_pHandleIndex[hCurCacher].szPathName, szProfileName, MAX_PATH_NUM - 1); -#endif*/ +#endif pgc32 iExeRev = 0; if ((iExeRev = ProcessCreateCache(hCurCacher)) != SUCCESS) return iExeRev; @@ -1619,7 +1622,7 @@ int write_pgcprofile_string( { psTemp = &psCacheEntry[iCurItem]; #ifdef OS_WINDOWS - lstrcpyn(psTemp->szSecName, lpAppName, MAX_CHAR_LINE); + lstrcpyn((LPWSTR)psTemp->szSecName, (LPCWSTR)lpAppName, MAX_CHAR_LINE); #else memset(psTemp->szSecName, 0, MAX_CHAR_LINE); strncpy(psTemp->szSecName, lpAppName, MAX_CHAR_LINE - 1); @@ -1639,9 +1642,9 @@ int write_pgcprofile_string( psTemp = &psCacheEntry[iCurItem]; #ifdef OS_WINDOWS - lstrcpyn(psTemp->szSecName, lpAppName, MAX_CHAR_LINE); - lstrcpyn(psTemp->szItemName, lpKeyName, MAX_CHAR_LINE); - lstrcpyn(psTemp->szItemVal, lpString, MAX_CHAR_LINE); + lstrcpyn((LPWSTR)psTemp->szSecName, (LPCWSTR)lpAppName, MAX_CHAR_LINE); + lstrcpyn((LPWSTR)psTemp->szItemName, (LPCWSTR)lpKeyName, MAX_CHAR_LINE); + lstrcpyn((LPWSTR)psTemp->szItemVal, (LPCWSTR)lpString, MAX_CHAR_LINE); #else memset(psTemp, 0, sizeof(SItemInCache)); strncpy(psTemp->szSecName, lpAppName, MAX_CHAR_LINE - 1); diff --git a/Profile_Hash.h b/Profile_Hash.h index 3d5bc60..730caab 100644 --- a/Profile_Hash.h +++ b/Profile_Hash.h @@ -90,12 +90,12 @@ //#include #include #include -//#ifdef OS_LINUX +#ifndef _WIN32 // #include -//#else +#else #include #include -//#endif //OS_LINUX +#endif //OS_LINUX #include "global_errno.h" #include "typedef.h" diff --git a/baohua.h b/baohua.h index b42ef03..2e2e26c 100644 --- a/baohua.h +++ b/baohua.h @@ -54,7 +54,9 @@ void YkYtCommandProcess( int port, u_char *buf, int len ); // 读设备信息,检查芯片状态和读芯片类型和频率 void ReadPortConfigInfo( u_short netport ); +#ifdef OS_WINDOWS void DataDisp( HWND ); +#endif void CloseUdpSetSock( void ); void PageUp( void ); diff --git a/basefunc.cpp b/basefunc.cpp index 16707b8..1a14ae1 100644 --- a/basefunc.cpp +++ b/basefunc.cpp @@ -74,6 +74,21 @@ int CmpString2(const char *str1, const char *str2) return 1; } +#ifdef OS_UNIX +char *strupr(char *str) +{ + char *ptr = str; + + while (*ptr != '\0') { + if (islower(*ptr)) + *ptr = toupper(*ptr); + ptr++; + } + + return str; +} +#endif + BOOL IsRemarkLine(const char *str) { int i, iLen; diff --git a/basefunc.h b/basefunc.h index fbd11eb..db82c3b 100644 --- a/basefunc.h +++ b/basefunc.h @@ -3,6 +3,7 @@ #if !defined(_BASEFUNC_H_200506101543__INCLUDED_) #define _BASEFUNC_H_200506101543__INCLUDED_ #include "basetype.h" +#include "common.h" DSLIB_API void DebugPrint(char *szDebug); @@ -43,4 +44,8 @@ int SequenceHostToRtuint(int iValue); DWORD SequenceHostToRtuDWord(DWORD dwValue); DWORD SequenceRtuToHostDWord(DWORD dwValue); +#ifdef OS_UNIX +char *strupr(char *str); +#endif + #endif // !defined(_BASEFUNC_H_200506101543__INCLUDED_) diff --git a/basetype.h b/basetype.h index 1d1141e..dc9cb83 100644 --- a/basetype.h +++ b/basetype.h @@ -36,9 +36,9 @@ typedef struct tagCMDDEF } CMDDEF, *pCMDDEF; #ifndef _WIN32 -typedef long long _int64; -typedef unsigned long long _uint64; -typedef int SOCKET; +// typedef long long _int64; +// typedef unsigned long long _uint64; +// typedef int SOCKET; #endif /*#ifndef OS_WINDOWS diff --git a/buban103.cpp b/buban103.cpp index 356b51d..025182b 100644 --- a/buban103.cpp +++ b/buban103.cpp @@ -364,8 +364,8 @@ void Buban103RecvData(int commid, u_char *buf, int len)// #ifndef OS_LINUX if((GetCurPort() == commid) && IsRealDataDisp()) { - WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA, - (BYTE *)pPortParam->m_achRecvBuf, pPortParam->m_iRecvLen); + // WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA, + // (BYTE *)pPortParam->m_achRecvBuf, pPortParam->m_iRecvLen); } #endif break; @@ -378,8 +378,10 @@ void Buban103RecvData(int commid, u_char *buf, int len)// // wen 2004.11.22 增加显示 if((GetCurPort() == commid) && IsRealDataDisp()) { +#if 0 WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA, - (BYTE *)pPortParam->m_achRecvBuf, pPortParam->m_iRecvLen); + (BYTE *)pPortParam->m_achRecvBuf, pPortParam->m_iRecvLen); +#endif } #endif Buban103ProcessData(commid, pPortParam, FALSE); @@ -395,8 +397,10 @@ void Buban103RecvData(int commid, u_char *buf, int len)// // wen 2004.11.22 增加显示 if((GetCurPort() == commid) && IsRealDataDisp()) { +#if 0 WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA, (BYTE *)pPortParam->m_achRecvBuf, pPortParam->m_iRecvLen); +#endif } #endif Buban103ProcessData(commid, pPortParam, FALSE); @@ -1247,7 +1251,7 @@ BOOL InitBuban103InfoFromTempletFile(int commid, break; case PARAM_DEV: - bVal = GetDevParamFromTemplateFile(commid, hFile, psLink); + // bVal = GetDevParamFromTemplateFile(commid, hFile, psLink); break; default: diff --git a/common.h b/common.h index c6cf72c..b43f523 100644 --- a/common.h +++ b/common.h @@ -10,6 +10,11 @@ #ifndef __COMMON_H_ICL__ #define __COMMON_H_ICL__ +#ifdef _WIN32 +#else +#define OS_UNIX +#endif + #ifdef _WIN32 #ifdef _DEBUG @@ -28,6 +33,7 @@ #include #endif +#include "platform_def.h" #include #include #include @@ -90,6 +96,7 @@ typedef u_short WORD; typedef u_long DWORD; #ifndef _WIN32 +#define OS_UNIX typedef unsigned long long ULONG_PTR, *PULONG_PTR; typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; @@ -101,6 +108,9 @@ typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #define _getpid getpid #define _stricmp strcasecmp #define Sleep(x) usleep(1000*x) +// #define GetPrivateProfileString QGetPrivateProfileString +#define max(a,b) (((a) > (b)) ? (a) : (b)) +#define min(a,b) (((a) < (b)) ? (a) : (b)) #endif #define BYTE3(a) (((a)&0xff)<<24) #define BYTE2(a) (((a)&0xff)<<16) @@ -1221,7 +1231,7 @@ typedef struct }DEVPROVSOE; // 所有规约的通用函数接口指针 -typedef const struct +typedef const struct tagFUNCTION_CALL { char *ProtocolName; // 规约名称 char *Account; // 规约说明 diff --git a/commport.cpp b/commport.cpp index 887c517..41fa4c0 100644 --- a/commport.cpp +++ b/commport.cpp @@ -10,10 +10,12 @@ //#include "stdafx.h" //#include "resource.h" #include "commport.h" +#include "common.h" #include "udpcomm.h" #include "udpping.h" #include "tcphost.h" #include "netport.h" + #ifdef _WIN32 #include #else @@ -23,6 +25,7 @@ #include #include #include +#include "inifile.h" #endif //#include "..\confrwlib\confrw.h" @@ -32,9 +35,9 @@ extern int CurPort; extern int RealDataDispFlag; extern int iCurDevIdx; -extern DEV_DEF DevParam[]; +// extern DEV_DEF DevParam[]; -extern UDP_SET_DEF UdpParam; +// extern UDP_SET_DEF UdpParam; extern int RealDataDispFlag; FUNCTION_CALL *FunCallPtr; @@ -92,7 +95,11 @@ u_long GetPrivateProString(const char *section, const char *entry, const char *d } else //其它情况使用老办法读配置 { +#ifdef _WIN32 GetPrivateProfileString((LPWSTR)section, (LPWSTR)entry, (LPWSTR)defaultstr, (LPWSTR)result, len, (LPWSTR)inifile); +#else + GetPrivateProfileString(section, entry, defaultstr, result, len, inifile); +#endif printf("\nTIP_(%04d): GetPrivateProString used GetPrivateProfileString(inifile=%s,section=%s, item=%s,result=%s)\n", inifile, section, entry, result); result[0] = 0; } @@ -818,7 +825,11 @@ void ReadPortConfigInfo(u_short netport) // wen 2005.03.01 增加遥控遥调转发处理 //"ProvYkYtTimeOut"="转发遥控超时时间" +#ifdef _WIN32 GetPrivateProfileString((LPWSTR)entry, (LPWSTR)"ProvYkYtTimeOut", (LPWSTR)"10", (LPWSTR)szbuf, 120, (LPWSTR)szPortConfig); +#else + GetPrivateProfileString(entry, "ProvYkYtTimeOut", "10", szbuf, 120, szPortConfig); +#endif SioParam[i].m_psBaoHu->ProvYkYtMsg.m_iTimeOut = atoi(szbuf); #ifdef _OS_WINDOWS_DEBUG_ @@ -1053,7 +1064,11 @@ mallocdbflag: // wen 2005.03.01 增加遥控遥调转发处理 //"ProvYkYtTimeOut"="转发遥控超时时间" +#ifdef _WIN32 GetPrivateProfileString((LPWSTR)entry, (LPWSTR)"ProvYkYtTimeOut", (LPWSTR)"10", (LPWSTR)szbuf, 120, (LPWSTR)szPortConfig); +#else + GetPrivateProfileString(entry, "ProvYkYtTimeOut", "10", szbuf, 120, szPortConfig); +#endif SioParam[i].m_psBaoHu->ProvYkYtMsg.m_iTimeOut = atoi(szbuf); #ifdef _OS_WINDOWS_DEBUG_ @@ -2212,6 +2227,7 @@ void SendCmdFormPollCmdBuf(int port) if (len < 3) return; +#if 0 if (UdpParam.Socket) { FillAndSendCmd(0, port, SDS_SIO_SEND_DATA, @@ -2223,6 +2239,7 @@ void SendCmdFormPollCmdBuf(int port) SioParam[port].m_psBaoHu->RevCmdFlag = 0; } + if ((FAST_CMD_TYPE == SioParam[port].m_psBaoHu->LastGetCmdBuf) || (UdpParam.Socket == 0)) { @@ -2237,6 +2254,7 @@ void SendCmdFormPollCmdBuf(int port) //ClearCmdAllFlag(port); // 清除当前命令 } } +#endif } void TimerProc(void) @@ -2550,7 +2568,7 @@ void SendDataToPort(int commid, char *buf, int len) #ifdef OS_LINUX AddNode(commid, (char *)buf, len); #else - FillAndSendCmd(0, commid, SDS_SIO_SEND_DATA, (u_char*)buf, len); + // FillAndSendCmd(0, commid, SDS_SIO_SEND_DATA, (u_char*)buf, len); // wen 2004.12.21 发送计数已经在发送时做了计算 SioParam[commid].SendCharNum += len; #endif @@ -2690,7 +2708,7 @@ BOOL SendYkYtCommand2(int commid, YKYT_PARAM *pParam) { Val[2] = 1; } - SetYkYtAckData(commid, Val); + // SetYkYtAckData(commid, Val); return TRUE; } @@ -4330,7 +4348,9 @@ int GetSioParam(SIO_PARAM_DEF **ppParam) int GetDevParam(DEV_DEF **ppParam) { +#if 0 *ppParam = &DevParam[iCurDevIdx]; +#endif return GetMaxPort(); } diff --git a/config.ini b/config.ini index a080125..9c0a6bd 100644 --- a/config.ini +++ b/config.ini @@ -1,26 +1,26 @@ -[网络设置] -主机网络端口=7119 -PING接收端口=13124 -PING发送端口=13123 -[主机地址] -主机A地址1=192.168.1.199 -停止向主机发送端口全数据=0 -[前置机] -前置机A地址1=192.168.1.143 -前置机A地址2=192.168.2.143 -前置机B地址1=192.168.1.113 -前置机B地址2=192.168.2.113 -前置机A地址1掩码=255.255.255.0 -前置机A地址2掩码=255.255.255.0 -前置机B地址1掩码=255.255.255.0 -前置机B地址2掩码=255.255.255.0 -允许前置机连接=1 -前置机连接=2 -起始厂站号=0 -运行方式=0 -主备切换端口屏蔽字=0x00000000 -[对时] -对时方式=1 +[缃戠粶璁剧疆] +涓绘満缃戠粶绔彛=7119 +PING鎺ユ敹绔彛=13124 +PING鍙戦佺鍙=13123 +[涓绘満鍦板潃] +涓绘満A鍦板潃1=192.168.1.199 +鍋滄鍚戜富鏈哄彂閫佺鍙e叏鏁版嵁=0 +[鍓嶇疆鏈篯 +鍓嶇疆鏈篈鍦板潃1=192.168.1.143 +鍓嶇疆鏈篈鍦板潃2=192.168.2.143 +鍓嶇疆鏈築鍦板潃1=192.168.1.113 +鍓嶇疆鏈築鍦板潃2=192.168.2.113 +鍓嶇疆鏈篈鍦板潃1鎺╃爜=255.255.255.0 +鍓嶇疆鏈篈鍦板潃2鎺╃爜=255.255.255.0 +鍓嶇疆鏈築鍦板潃1鎺╃爜=255.255.255.0 +鍓嶇疆鏈築鍦板潃2鎺╃爜=255.255.255.0 +鍏佽鍓嶇疆鏈鸿繛鎺=1 +鍓嶇疆鏈鸿繛鎺=2 +璧峰鍘傜珯鍙=0 +杩愯鏂瑰紡=0 +涓诲鍒囨崲绔彛灞忚斀瀛=0x00000000 +[瀵规椂] +瀵规椂鏂瑰紡=1 [NetCommPort] UdpCommPort=0xfe00 TcpCommPort=0xff01 diff --git a/display.cpp b/display.cpp index a87779d..de316b0 100644 --- a/display.cpp +++ b/display.cpp @@ -7,9 +7,11 @@ extern SIO_PARAM_DEF SioParam[]; extern int iCurDevIdx; -extern DEV_DEF DevParam[]; +// extern DEV_DEF DevParam[]; +#ifdef _WIN32 HWND hMainWnd; +#endif int RealDataDispFlag; @@ -413,7 +415,8 @@ void RealPiDataDisp( HDC hdc ) void WatchDataDisp( HDC hdc ) { - UINT xWd, yHg, lineh; +#if 0 + UINT xWd, yHg, lineh; int i, j, total, idx, type; char szbuf[256]; RECT rc; @@ -470,6 +473,8 @@ void WatchDataDisp( HDC hdc ) rc.top += lineh; } +#endif + } //*************************************************************** diff --git a/inifile.h b/inifile.h index e15ec90..f737d20 100644 --- a/inifile.h +++ b/inifile.h @@ -25,32 +25,32 @@ bool IfBeforeHasRet(FILE* pFile); // //读配置文件中指定段下指定键的值(字符串) int QGetPrivateProfileString( - char* lpszSectionName, //段名 - char* lpszKeyName, //键名 - char* lpszDefault, //缺省字符串 + const char* lpszSectionName, //段名 + const char* lpszKeyName, //键名 + const char* lpszDefault, //缺省字符串 char* lpszReturnedString, //结果字符串 u_32 nSize, //结果字符串长度 - char* lpszFileName, //ini文件名 - char* lpszRemarkInLineStr = (char*)";", //行内注释符 - char chContinueLineChar = '\\' //续行符号 + const char* lpszFileName, //ini文件名 + const char* lpszRemarkInLineStr = (char*)";", //行内注释符 + const char chContinueLineChar = '\\' //续行符号 ); //读配置文件中指定段下指定键的值(整数) int QGetPrivateProfileInt( - char* lpszSectionName, //段名 - char* lpszKeyName, //键名 + const char* lpszSectionName, //段名 + const char* lpszKeyName, //键名 int nDefault, //缺省值 - char* lpszFileName, //ini文件名 - char* lpszRemarkInLineStr = (char*)";", //行内注释符 - char chContinueLineChar = '\\' //续行符号 + const char* lpszFileName, //ini文件名 + const char* lpszRemarkInLineStr = (char*)";", //行内注释符 + const char chContinueLineChar = '\\' //续行符号 ); //向配置文件写入指定段下指定键的值(字符串) int QWritePrivateProfileString( - char* lpszSectionName, //段名 - char* lpszKeyName, //键名 - char* lpszString, //要写入的字符串 - char* lpszFileName //INI文件名 + const char* lpszSectionName, //段名 + const char* lpszKeyName, //键名 + const char* lpszString, //要写入的字符串 + const char* lpszFileName //INI文件名 ); #endif diff --git a/netport.cpp b/netport.cpp index b6c8ff9..f285814 100644 --- a/netport.cpp +++ b/netport.cpp @@ -10,6 +10,11 @@ //#include "serialport.h" #include "netport.h" #include "commport.h" +#include "common.h" + +#ifndef _WIN32 +#include +#endif int netWSAStartupErr = FALSE; @@ -19,12 +24,12 @@ extern u_short MaxSerialPortNum; extern u_short MaxNetPortNum; extern u_short MaxPortNum; -//创建 UDP 通讯 socket +//鍒涘缓 UDP 閫氳 socket BYTE CreateUdpSock(int *CommSock, DWORD NetPort, DWORD NetCommIpAddr) { int tmp, retval; struct sockaddr_in addr; - u_long largp = 1L; //非阻塞模式 + u_long largp = 1L; //闈為樆濉炴ā寮 char tmp_buf[256]; if(*CommSock > -1) @@ -40,22 +45,25 @@ BYTE CreateUdpSock(int *CommSock, DWORD NetPort, DWORD NetCommIpAddr) return FAIL_GREATE; } - // 将socket设置为非阻塞模式 - //tmp = fcntl(*CommSock, F_GETFL, 0); - //fcntl(*CommSock, F_SETFL, tmp|O_NONBLOCK); - + // 灏唖ocket璁剧疆涓洪潪闃诲妯″紡 +#ifdef OS_UNIX + tmp = fcntl(*CommSock, F_GETFL, 0); + fcntl(*CommSock, F_SETFL, tmp|O_NONBLOCK); +#else retval = ioctlsocket(*CommSock, FIONBIO, (u_long FAR *)&largp); +#endif if (SOCKET_ERROR == retval) { - retval = WSAGetLastError(); - sprintf(tmp_buf, "ioctlsocket设置非阻塞模式错误, SocketError=%d, SocketId = %d", retval, *CommSock); - DebugPrint(tmp_buf); + + // retval = WSAGetLastError(); + // sprintf(tmp_buf, "ioctlsocket璁剧疆闈為樆濉炴ā寮忛敊璇, SocketError=%d, SocketId = %d", retval, *CommSock); + // DebugPrint(tmp_buf); closesocket(*CommSock); *CommSock = -1; return FAIL_GREATE; } - //设置socket输入输出缓冲 + //璁剧疆socket杈撳叆杈撳嚭缂撳啿 tmp = MAX_NET_BUF_SIZE; setsockopt(*CommSock, SOL_SOCKET, SO_RCVBUF, (char*)&tmp, sizeof(tmp)); tmp = MAX_NET_BUF_SIZE; @@ -65,13 +73,13 @@ BYTE CreateUdpSock(int *CommSock, DWORD NetPort, DWORD NetCommIpAddr) setsockopt(*CommSock, SOL_SOCKET, SO_KEEPALIVE, (char*)&tmp, sizeof(tmp)); setsockopt(*CommSock, SOL_SOCKET, SO_REUSEADDR, (char*)&tmp, sizeof(tmp)); - // 增加udp广播通讯(广播地址) + // 澧炲姞udp骞挎挱閫氳(骞挎挱鍦板潃) if((NetCommIpAddr & 0x000000FF) == 0x000000FF) { setsockopt(*CommSock, SOL_SOCKET, SO_BROADCAST, (char*)&tmp, sizeof(tmp)); } - //让配置socket 能收不同网段的配置命令 + //璁╅厤缃畇ocket 鑳芥敹涓嶅悓缃戞鐨勯厤缃懡浠 //bzero(&addr, sizeof(addr)); memset((char*)&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; @@ -87,16 +95,21 @@ BYTE CreateUdpSock(int *CommSock, DWORD NetPort, DWORD NetCommIpAddr) return SUCCEED_GREATE; } -//创建 TCP Server socket +//鍒涘缓 TCP Server socket BYTE CreateTcpServerSock(int *LiSock, DWORD NetPort) { - int i, tmp, ret, retval, len; - int keep_alive = 1; // 设定KeepAlive - int keep_idle = 5; // 开始首次KeepAlive探测前的TCP空闭时间(s) - int keep_interval = 3; // 两次KeepAlive探测间的时间间隔(s) - int keep_count = 3; // 判定断开前的KeepAlive探测次数 + int i, tmp, ret, retval; +#ifdef _WIN32 + int len; +#else + socklen_t len; +#endif + int keep_alive = 1; // 璁惧畾KeepAlive + int keep_idle = 5; // 寮濮嬮娆eepAlive鎺㈡祴鍓嶇殑TCP绌洪棴鏃堕棿(s) + int keep_interval = 3; // 涓ゆKeepAlive鎺㈡祴闂寸殑鏃堕棿闂撮殧(s) + int keep_count = 3; // 鍒ゅ畾鏂紑鍓嶇殑KeepAlive鎺㈡祴娆℃暟 struct sockaddr_in addr; - u_long largp = 1L; //非阻塞模式 + u_long largp = 1L; //闈為樆濉炴ā寮 char tmp_buf[256]; if(-1 < *LiSock) @@ -111,26 +124,29 @@ BYTE CreateTcpServerSock(int *LiSock, DWORD NetPort) if(*LiSock < 0) { - retval = WSAGetLastError(); - sprintf(tmp_buf, "ioctlsocket设置非阻塞模式错误, SocketError=%d, SocketId = %d", retval, *LiSock); + // retval = WSAGetLastError(); + // sprintf(tmp_buf, "ioctlsocket璁剧疆闈為樆濉炴ā寮忛敊璇, SocketError=%d, SocketId = %d", retval, *LiSock); *LiSock = -1; return FAIL_GREATE; } - // 将socket设置为非阻塞模式 - //tmp = fcntl(*LiSock, F_GETFL, 0); - //fcntl(*LiSock, F_SETFL, tmp|O_NONBLOCK); - retval = ioctlsocket(*LiSock, FIONBIO, (u_long FAR *)&largp); + // 灏唖ocket璁剧疆涓洪潪闃诲妯″紡 +#ifdef OS_UNIX + tmp = fcntl(*LiSock, F_GETFL, 0); + fcntl(*LiSock, F_SETFL, tmp|O_NONBLOCK); +#else + retval = ioctlsocket(*LiSock, FIONBIO, (u_long FAR*)&largp); +#endif if (SOCKET_ERROR == retval) { - retval = WSAGetLastError(); - sprintf(tmp_buf, "ioctlsocket设置非阻塞模式错误, SocketError=%d, SocketId = %d", retval, *LiSock); - DebugPrint(tmp_buf); + // retval = WSAGetLastError(); + // sprintf(tmp_buf, "ioctlsocket璁剧疆闈為樆濉炴ā寮忛敊璇, SocketError=%d, SocketId = %d", retval, *LiSock); + // DebugPrint(tmp_buf); closesocket(*LiSock); *LiSock = -1; return FAIL_GREATE; } - ///设置socket的输入输出缓冲区大小 + ///璁剧疆socket鐨勮緭鍏ヨ緭鍑虹紦鍐插尯澶у皬 tmp = MAX_NET_BUF_SIZE; setsockopt(*LiSock, SOL_SOCKET, SO_RCVBUF, (char*)&tmp, sizeof(tmp)); tmp = MAX_NET_BUF_SIZE; @@ -146,7 +162,7 @@ BYTE CreateTcpServerSock(int *LiSock, DWORD NetPort) setsockopt(*LiSock, SOL_SOCKET, SO_REUSEADDR, (char*)&tmp, sizeof(tmp)); //set_keepalive(*LiSock, keep_alive, keep_idle, keep_interval, keep_count); - //让TCP接收所有连线 + //璁㏕CP鎺ユ敹鎵鏈夎繛绾 memset((char*)&addr,0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(NetPort); @@ -174,16 +190,21 @@ BYTE CreateTcpServerSock(int *LiSock, DWORD NetPort) return SUCCEED_GREATE; } -//创建 TCP Client socket +//鍒涘缓 TCP Client socket BYTE CreateTcpClientSock(int *CommSock, DWORD NetPort, DWORD NetCommIpAddr) { - int tmp,len; - int keep_alive = 1; // 设定KeepAlive - int keep_idle = 5; // 开始首次KeepAlive探测前的TCP空闭时间 - int keep_interval = 3; // 两次KeepAlive探测间的时间间隔 - int keep_count = 3; // 判定断开前的KeepAlive探测次数 + int tmp; +#ifdef _WIN32 + int len; +#else + socklen_t len; +#endif + int keep_alive = 1; // 璁惧畾KeepAlive + int keep_idle = 5; // 寮濮嬮娆eepAlive鎺㈡祴鍓嶇殑TCP绌洪棴鏃堕棿 + int keep_interval = 3; // 涓ゆKeepAlive鎺㈡祴闂寸殑鏃堕棿闂撮殧 + int keep_count = 3; // 鍒ゅ畾鏂紑鍓嶇殑KeepAlive鎺㈡祴娆℃暟 struct sockaddr_in addr; - u_long largp = 1L; //非阻塞模式 + u_long largp = 1L; //闈為樆濉炴ā寮 char tmp_buf[256]; if(-1 < *CommSock) @@ -199,21 +220,24 @@ BYTE CreateTcpClientSock(int *CommSock, DWORD NetPort, DWORD NetCommIpAddr) return FAIL_GREATE; } - // 将socket设置为非阻塞模式 - //tmp = fcntl(*CommSock, F_GETFL, 0); - //fcntl(*CommSock, F_SETFL, tmp|O_NONBLOCK); - tmp = ioctlsocket(*CommSock, FIONBIO, (u_long FAR *)&largp); + // 灏唖ocket璁剧疆涓洪潪闃诲妯″紡 +#ifdef OS_UNIX + tmp = fcntl(*CommSock, F_GETFL, 0); + fcntl(*CommSock, F_SETFL, tmp|O_NONBLOCK); +#else + tmp = ioctlsocket(*CommSock, FIONBIO, (u_long *)&largp); +#endif if (SOCKET_ERROR == tmp) { - tmp = WSAGetLastError(); - sprintf(tmp_buf, "ioctlsocket设置非阻塞模式错误, SocketError=%d, SocketId = %d", tmp, *CommSock); - DebugPrint(tmp_buf); + // tmp = WSAGetLastError(); + // sprintf(tmp_buf, "ioctlsocket璁剧疆闈為樆濉炴ā寮忛敊璇, SocketError=%d, SocketId = %d", tmp, *CommSock); + // DebugPrint(tmp_buf); closesocket(*CommSock); *CommSock = -1; return FAIL_GREATE; } - ///设置socket的输入输出缓冲区大小 + ///璁剧疆socket鐨勮緭鍏ヨ緭鍑虹紦鍐插尯澶у皬 tmp = MAX_NET_BUF_SIZE; setsockopt(*CommSock, SOL_SOCKET, SO_RCVBUF, (char*)&tmp, sizeof(tmp)); tmp = MAX_NET_BUF_SIZE; @@ -247,7 +271,7 @@ BYTE CreateTcpClientSock(int *CommSock, DWORD NetPort, DWORD NetCommIpAddr) *CommSock = -1; return FAIL_GREATE; } - // 非阻塞的情况下不能这样使用 + // 闈為樆濉炵殑鎯呭喌涓嬩笉鑳借繖鏍蜂娇鐢 // else // { // if(connect(*CommSock, (struct sockaddr *)&addr, sizeof(addr)) < 0) @@ -267,10 +291,10 @@ BYTE CreateTcpClientSock(int *CommSock, DWORD NetPort, DWORD NetCommIpAddr) return SUCCEED_GREATE; } -//int keep_alive = 1;//设定KeepAlive -//int keep_idle = 1;//开始首次KeepAlive探测前的TCP空闭时间 -//int keep_interval = 1;//两次KeepAlive探测间的时间间隔 -//int keep_count = 3;//判定断开前的KeepAlive探测次数 +//int keep_alive = 1;//璁惧畾KeepAlive +//int keep_idle = 1;//寮濮嬮娆eepAlive鎺㈡祴鍓嶇殑TCP绌洪棴鏃堕棿 +//int keep_interval = 1;//涓ゆKeepAlive鎺㈡祴闂寸殑鏃堕棿闂撮殧 +//int keep_count = 3;//鍒ゅ畾鏂紑鍓嶇殑KeepAlive鎺㈡祴娆℃暟 /*void set_keepalive(int fd, int keep_alive, int keep_idle, int keep_interval, int keep_count) { if(keep_alive) @@ -305,7 +329,7 @@ void OpenNetPort(int commid) netcommipaddr = SioParam[commid].NetCommIpAddr; switch(SioParam[commid].NetType) { - case UDP_COMM: // UDP 通讯 + case UDP_COMM: // UDP 閫氳 if(OPEN_PORT == SioParam[commid].OpenFlag) return; succeedflag = CreateUdpSock(&commsock, netport, netcommipaddr); @@ -316,7 +340,7 @@ void OpenNetPort(int commid) } break; - case TCP_S_COMM: // TCP 服务器通讯 + case TCP_S_COMM: // TCP 鏈嶅姟鍣ㄩ氳 commsock = SioParam[commid].LiSock; succeedflag = CreateTcpServerSock(&commsock, netport); if(SUCCEED_GREATE == succeedflag) @@ -327,7 +351,7 @@ void OpenNetPort(int commid) { if(SioParam[i].NetPort == netport) { - printf("端口%d netport=%d lisock=%d\n", i+1, netport, commsock); + printf("绔彛%d netport=%d lisock=%d\n", i+1, netport, commsock); SioParam[i].LiSock = commsock; } } @@ -335,7 +359,7 @@ void OpenNetPort(int commid) } break; - case TCP_C_COMM: // TCP 客户通讯 + case TCP_C_COMM: // TCP 瀹㈡埛閫氳 if(OPEN_PORT == SioParam[commid].OpenFlag) return; succeedflag = CreateTcpClientSock(&commsock, netport, netcommipaddr); @@ -343,7 +367,7 @@ void OpenNetPort(int commid) { SioParam[commid].CommSock = commsock; //if(commid == 8) - //printf("端口%d 创建TCP 客户端成功,socket=%d\n", commid+1, SioParam[commid].CommSock); + //printf("绔彛%d 鍒涘缓TCP 瀹㈡埛绔垚鍔燂紝socket=%d\n", commid+1, SioParam[commid].CommSock); } break; } @@ -353,7 +377,7 @@ void CloseNetPort(int commid) { switch(SioParam[commid].NetType) { - case UDP_COMM: // UDP 通讯 + case UDP_COMM: // UDP 閫氳 if(SioParam[commid].CommSock > -1) closesocket(SioParam[commid].CommSock); @@ -364,10 +388,10 @@ void CloseNetPort(int commid) } break; - case TCP_S_COMM: // TCP 服务器通讯 + case TCP_S_COMM: // TCP 鏈嶅姟鍣ㄩ氳 if(SioParam[commid].CommSock > -1) closesocket(SioParam[commid].CommSock); - //printf("关闭端口%d TCP客户端Socket=%d\n", commid+1, SioParam[commid].CommSock); + //printf("鍏抽棴绔彛%d TCP瀹㈡埛绔疭ocket=%d\n", commid+1, SioParam[commid].CommSock); SioParam[commid].CommSock = -1; if(CLOSE_PORT != SioParam[commid].OpenFlag) { @@ -375,57 +399,61 @@ void CloseNetPort(int commid) } break; - case TCP_C_COMM: // TCP 客户端通讯 + case TCP_C_COMM: // TCP 瀹㈡埛绔氳 if(SioParam[commid].CommSock > -1) closesocket(SioParam[commid].CommSock); SioParam[commid].CommSock = -1; - //printf("关闭端口%d TCP客户端Socket=%d\n", commid+1, SioParam[commid].CommSock); + //printf("鍏抽棴绔彛%d TCP瀹㈡埛绔疭ocket=%d\n", commid+1, SioParam[commid].CommSock); if(CLOSE_PORT != SioParam[commid].OpenFlag) { SioParam[commid].OpenFlag = CLOSE_PORT; } break; } - // 删除所有的发送缓冲区wen 2005.07.27 + // 鍒犻櫎鎵鏈夌殑鍙戦佺紦鍐插尯wen 2005.07.27 PortWriteDataFree(commid); } -// TCP服务器端的侦听socket关闭与打开与端口是否打开的标识(SioParam[commid].OpenFlag)无关 +// TCP鏈嶅姟鍣ㄧ鐨勪睛鍚瑂ocket鍏抽棴涓庢墦寮涓庣鍙f槸鍚︽墦寮鐨勬爣璇(SioParam[commid].OpenFlag)鏃犲叧 void CloseNetListenPort(int commid) { int i; switch(SioParam[commid].NetType) { - case TCP_S_COMM: // TCP 服务器通讯 + case TCP_S_COMM: // TCP 鏈嶅姟鍣ㄩ氳 if(SioParam[commid].LiSock > -1) //close(SioParam[commid].LiSock); closesocket(SioParam[commid].LiSock); SioParam[commid].LiSock = -1; - // 使用相同TCP服务端口的端口的listen套接字全部标识为-1(关闭) + // 浣跨敤鐩稿悓TCP鏈嶅姟绔彛鐨勭鍙g殑listen濂楁帴瀛楀叏閮ㄦ爣璇嗕负锛1(鍏抽棴) for(i=MaxSerialPortNum; i= MAX_MSG_BUF_SIZE); } -//从头结点往后删 +//浠庡ご缁撶偣寰鍚庡垹 void DelNode(int commid) { struct WR_DATA *next; @@ -472,7 +500,7 @@ void UdpSend(int commid) addr.sin_port = htons(SioParam[commid].NetPort); addr.sin_addr.s_addr = SioParam[commid].NetCommIpAddr; - // 错误判断和断点续传 + // 閿欒鍒ゆ柇鍜屾柇鐐圭画浼 plen = SioParam[commid].WriteData->PLen; slen = SioParam[commid].WriteData->MsgLen - plen; if(slen <= 0) @@ -516,7 +544,7 @@ BOOL TcpRecv(int commid, int fds, u_long ipaddr) // if(OPEN_PORT != SioParam[commid].OpenFlag) // return FALSE; bRetVal = TRUE; - //删除已断开的子socket + //鍒犻櫎宸叉柇寮鐨勫瓙socket //ioctl(fds, FIONREAD, &nread); /*if(nread == 0) { @@ -530,7 +558,7 @@ BOOL TcpRecv(int commid, int fds, u_long ipaddr) do { len = recv(fds, revbuf, MAX_MSG_BUF_SIZE, 0); - // 错误判断 len = 0 有可能是对方已经关闭socket + // 閿欒鍒ゆ柇 len = 0 鏈夊彲鑳芥槸瀵规柟宸茬粡鍏抽棴socket if(len <= 0) { printf("port%d read error len=%d\n", commid+1, len); @@ -560,7 +588,7 @@ void TcpSend(int commid) if(OPEN_PORT != SioParam[commid].OpenFlag) { SioParam[commid].OpenFlag = OPEN_PORT; - //printf("设置Tcp端口%d 端口状态为OPEN_PORT!\n", commid+1); + //printf("璁剧疆Tcp绔彛%d 绔彛鐘舵佷负OPEN_PORT锛乗n", commid+1); } else { @@ -574,7 +602,7 @@ void TcpSend(int commid) return; } - // 增加错误判断和断点续传 + // 澧炲姞閿欒鍒ゆ柇鍜屾柇鐐圭画浼 plen = SioParam[commid].WriteData->PLen; slen = SioParam[commid].WriteData->MsgLen - plen; if(slen <= 0) @@ -590,7 +618,7 @@ void TcpSend(int commid) { if(EINPROGRESS != errno) { - //printf("端口%d 发送错误,关闭Tcp通讯\n", commid+1); + //printf("绔彛%d 鍙戦侀敊璇紝鍏抽棴Tcp閫氳\n", commid+1); CloseNetPort(commid); } else @@ -607,7 +635,7 @@ void TcpSend(int commid) } else if(EINPROGRESS != errno) { - //printf("端口%d 不能发送数据,关闭Tcp通讯\n", commid+1); + //printf("绔彛%d 涓嶈兘鍙戦佹暟鎹紝鍏抽棴Tcp閫氳\n", commid+1); CloseNetPort(commid); } } @@ -615,25 +643,30 @@ void TcpSend(int commid) void TcpAccept(int commid, int lisfds) { - int sock, result, i, addr_len, tmp; + int sock, i, tmp; +#ifdef _WIN32 + int result, addr_len; +#else + socklen_t result, addr_len; +#endif struct sockaddr_in addr; - int keep_alive = 1; // 设定KeepAlive - int keep_idle = 5; // 开始首次KeepAlive探测前的TCP空闭时间 - int keep_interval = 3; // 两次KeepAlive探测间的时间间隔 - int keep_count = 3; // 判定断开前的KeepAlive探测次数 + int keep_alive = 1; // 璁惧畾KeepAlive + int keep_idle = 5; // 寮濮嬮娆eepAlive鎺㈡祴鍓嶇殑TCP绌洪棴鏃堕棿 + int keep_interval = 3; // 涓ゆKeepAlive鎺㈡祴闂寸殑鏃堕棿闂撮殧 + int keep_count = 3; // 鍒ゅ畾鏂紑鍓嶇殑KeepAlive鎺㈡祴娆℃暟 fd_set set; - u_long largp = 1L; //非阻塞模式 + u_long largp = 1L; //闈為樆濉炴ā寮 char tmp_buf[256]; addr_len = sizeof(struct sockaddr_in); - //printf("端口%d 检查是否有客户端过来连接\n", commid+1); + //printf("绔彛%d 妫鏌ユ槸鍚︽湁瀹㈡埛绔繃鏉ヨ繛鎺n", commid+1); sock = accept(lisfds, (struct sockaddr *)&addr, &addr_len); if(sock < 0) { return; } printf("TIP_(%04d): Port = %d, addr.sin_addr.s_addr(%08x), sock = %d\n", _getpid(), commid+1, addr.sin_addr.s_addr, sock); - // 多客户端向服务端连接时判断客户端来自的端口号 yizhonghu 20070704 + // 澶氬鎴风鍚戞湇鍔$杩炴帴鏃跺垽鏂鎴风鏉ヨ嚜鐨勭鍙e彿 yizhonghu 20070704 for(i=MaxSerialPortNum; i SioParam[commid].CommSock) && (-1 < SioParam[commid].LiSock)) { fds = SioParam[commid].LiSock; @@ -718,7 +754,7 @@ int AddFdToSet(int commid, int *fd_max, fd_set *fdset_ro, fd_set *fdset_wr, fd_s } setflag = 2; break; - case TCP_C_COMM: // 检查TCP客户端套接字是否建立 + case TCP_C_COMM: // 妫鏌CP瀹㈡埛绔鎺ュ瓧鏄惁寤虹珛 if (-1 < SioParam[commid].CommSock) { fds = SioParam[commid].CommSock; @@ -741,7 +777,7 @@ int AddFdToSet(int commid, int *fd_max, fd_set *fdset_ro, fd_set *fdset_wr, fd_s } if (1 == setflag) return inum; - // if(2 == setflag) 无需处理 + // if(2 == setflag) 鏃犻渶澶勭悊 return inum; } @@ -749,7 +785,12 @@ int AddFdToSet(int commid, int *fd_max, fd_set *fdset_ro, fd_set *fdset_wr, fd_s void PollAllPort(void) { struct timeval timeout; - int i, inum, nfds, commid, fds, lisfds, ret, ierr, ierrlen; + int i, inum, nfds, commid, fds, lisfds, ret, ierr; +#ifdef _WIN32 + int ierrlen; +#else + socklen_t ierrlen; +#endif u_long ipaddr; fd_set fdset_ro, fdset_wr, fdset_ex; /*static int ok=0;*/ @@ -766,7 +807,7 @@ void PollAllPort(void) } if(inum < 1) return; - // 设置超时等待时间为0 + // 璁剧疆瓒呮椂绛夊緟鏃堕棿涓0 memset((char*)&timeout, 0, sizeof(struct timeval)); if(select(nfds+1, &fdset_ro, &fdset_wr, &fdset_ex, &timeout) < 1) { @@ -785,35 +826,35 @@ void PollAllPort(void) case UDP_COMM: if(SioParam[commid].CommSock < 0) break; - // 判断socket是否异常 + // 鍒ゆ柇socket鏄惁寮傚父 if(FD_ISSET(fds, &fdset_ex)) { CloseNetPort(commid); break; } - // socket可读 + // socket鍙 if(FD_ISSET(fds, &fdset_ro)) - UdpRecv(commid, fds, ipaddr);// 将该socket中的数据读完 - // socket可写 + UdpRecv(commid, fds, ipaddr);// 灏嗚socket涓殑鏁版嵁璇诲畬 + // socket鍙啓 if(FD_ISSET(fds, &fdset_wr)) UdpSend(commid); break; case TCP_C_COMM: if(SioParam[commid].CommSock < 0) break; - // 判断socket是否异常 + // 鍒ゆ柇socket鏄惁寮傚父 if(FD_ISSET(fds, &fdset_ex)) { CloseNetPort(commid); break; } - // socket可读 + // socket鍙 if(FD_ISSET(fds, &fdset_ro)) { - if(TcpRecv(commid, fds, ipaddr) == FALSE) // 将该socket中的数据读完 - break; // 端口可能已经关闭 + if(TcpRecv(commid, fds, ipaddr) == FALSE) // 灏嗚socket涓殑鏁版嵁璇诲畬 + break; // 绔彛鍙兘宸茬粡鍏抽棴 } - // socket可写 + // socket鍙啓 if(FD_ISSET(fds, &fdset_wr)) { ierrlen = sizeof(ierr); @@ -830,7 +871,7 @@ void PollAllPort(void) lisfds = SioParam[commid].LiSock; /*if(ok < 1000) { - printf("端口%d lisock=%d fds = %d\n", commid+1, lisfds, fds); + printf("绔彛%d lisock=%d fds = %d\n", commid+1, lisfds, fds); ok++; }*/ if(fds < 0) @@ -839,7 +880,7 @@ void PollAllPort(void) break; if(FD_ISSET(lisfds, &fdset_ex)) { - //printf("端口%d 关闭服务器端口\n", commid+1); + //printf("绔彛%d 鍏抽棴鏈嶅姟鍣ㄧ鍙n", commid+1); CloseNetListenPort(commid); } else if(FD_ISSET(lisfds, &fdset_ro)) @@ -848,24 +889,24 @@ void PollAllPort(void) } break; } - // 判断socket是否异常 + // 鍒ゆ柇socket鏄惁寮傚父 if(FD_ISSET(fds, &fdset_ex)) { - //printf("端口%d socket异常,关闭Tcp通讯\n", commid+1); + //printf("绔彛%d socket寮傚父锛屽叧闂璗cp閫氳\n", commid+1); CloseNetPort(commid); break; } - // socket可读 + // socket鍙 if(FD_ISSET(fds, &fdset_ro)) { - if(TcpRecv(commid, fds, ipaddr) == FALSE) // 将该socket中的数据读完 - break; // 端口可能已经关闭 + if(TcpRecv(commid, fds, ipaddr) == FALSE) // 灏嗚socket涓殑鏁版嵁璇诲畬 + break; // 绔彛鍙兘宸茬粡鍏抽棴 } - // socket可写 + // socket鍙啓 if(FD_ISSET(fds, &fdset_wr)) TcpSend(commid); break; } } - // 服务器端口读写数据 + // 鏈嶅姟鍣ㄧ鍙h鍐欐暟鎹 } \ No newline at end of file diff --git a/os_heap.cpp b/os_heap.cpp index 05957df..462edb6 100644 --- a/os_heap.cpp +++ b/os_heap.cpp @@ -24,11 +24,11 @@ #include "list_entry.h" #include "os_heap.h" -//#if defined(WIN32) +#if defined(_WIN32) #include #include #include -//#endif +#endif #ifdef _fclose #undef _fclose diff --git a/platform_def.h b/platform_def.h index 529586b..35bf0b9 100644 --- a/platform_def.h +++ b/platform_def.h @@ -59,7 +59,7 @@ c. Unix #include //inet地址族的所有结构和常量定义都在这里 #include #include - #include + // #include #include #include #include @@ -86,6 +86,9 @@ c. Unix #define WritePrivateProfileString QWritePrivateProfileString #define closesocket close //winsock中关闭socket用closesocket(),而bsd socket中用close() +#define _strdup strdup +#define lstrcpyn strncpy +#define _getcwd getcwd #endif /*-------------------------------- 类型定义 ------------------------------------*/ diff --git a/tcphost.cpp b/tcphost.cpp index 4233fb2..26984b0 100644 --- a/tcphost.cpp +++ b/tcphost.cpp @@ -2839,6 +2839,7 @@ HOSTMSG *GetRtuChangeMsgPtr() return gRtuChangeMsg; } +#if 0 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // 增加字节顺序转换函数 BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) @@ -3215,4 +3216,5 @@ void SendSystemTimeToHost(void) rtumsg.MsgLen = 16; SendDataToAllHostSendBuf( (u_char*)&rtumsg, rtumsg.MsgLen + sizeof(HOSTMSGHEAD)); -} \ No newline at end of file +} +#endif diff --git a/udpcomm.h b/udpcomm.h index 10311eb..7c955ce 100644 --- a/udpcomm.h +++ b/udpcomm.h @@ -21,8 +21,14 @@ int FillAndSendCmd( u_long ipaddr, u_char port, WORD cmd, u_char *retbuf, int le void ValueToBuf( u_char *buf, u_long val, int len ); u_long BufToValue( u_char *buf, int len ); -void WatchDataPutDispBuf( int port, WORD type, u_char *buf, int len ); -void WatchDataPutDispBufToFile(int port, WORD type, u_char *buf, int len); +inline void WatchDataPutDispBuf(int port, WORD type, u_char *buf, int len) +{ + +} +inline void WatchDataPutDispBufToFile(int port, WORD type, u_char *buf, int len) +{ + +} void SetUdpRecvDataProcess( u_long ipaddr, u_char *buf, int len ); @@ -33,6 +39,9 @@ void SetDevTime(); void ResetDev(int iDevNo); -BOOL isUdpSocketExist(); +inline BOOL isUdpSocketExist() +{ + return 1; +} #endif \ No newline at end of file diff --git a/widgets.cpp b/widgets.cpp index 2fe7b84..bed4965 100644 --- a/widgets.cpp +++ b/widgets.cpp @@ -1,6 +1,5 @@ 锘// widgets.cpp : 姝ゆ枃浠跺寘鍚 "main" 鍑芥暟銆傜▼搴忔墽琛屽皢鍦ㄦ澶勫紑濮嬪苟缁撴潫銆 // -#define OS_WINDOWS 0 #include #include "baohua.h" #include "buban103.h" @@ -57,7 +56,9 @@ int main(void) int ret = SUCCESS; char filename[256]; +#ifdef OS_WINDOWS WSADATA WSAData; +#endif //瀹氭椂鍣ㄦ寚閽堢疆绌 //m_pMainTimer = NULL; @@ -105,12 +106,14 @@ int main(void) strcpy(Manufacturer, MANUFACTURER); InitBaohuMainFlag = 1; +#ifdef OS_WINDOWS if (WSAStartup(MAKEWORD(2, 1), (LPWSADATA)&WSAData) != 0) { ret = WSAGetLastError(); //HostWSAStartupErr = TRUE; //return FALSE; } +#endif } diff --git a/widgets.vcxproj b/widgets.vcxproj index 422c90c..0ee6f84 100644 --- a/widgets.vcxproj +++ b/widgets.vcxproj @@ -104,7 +104,7 @@ Level3 Disabled true - _DEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;DISABLE_OS_HEAP + _DEBUG;_CONSOLE;OS_WINDOWS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;DISABLE_OS_HEAP true /UTF-8 %(AdditionalOptions) @@ -170,9 +170,6 @@ - - - diff --git a/widgets.vcxproj.filters b/widgets.vcxproj.filters index 84d8d21..bbac05f 100644 --- a/widgets.vcxproj.filters +++ b/widgets.vcxproj.filters @@ -36,15 +36,6 @@ 婧愭枃浠 - - 婧愭枃浠 - - - 婧愭枃浠 - - - 婧愭枃浠 - 婧愭枃浠