一个sgip的问题,为什么模拟网关登陆失败?
struct _Seqid
{
unsigned int nSrcNodeNum;
unsigned int nDateTime;
unsigned int nSeqId;
};
struct _Head
{
unsigned int nMsgLen;
unsigned int nCmdId;
_Seqid nSeqNum;
};
struct _Bind
{
_Head head;
unsigned char nLgType;
char sLgName[16];
char sLgPwd[16];
char sReserved[8];
};
int Login(char * sSvrIp, int nSvrPort, int nSeq)
{
WSADATA WSAData;
if (WSAStartup(MAKEWORD(1, 1), &WSAData) != 0)
{
return -1;
}
SOCKET client;
if ((client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
WSACleanup();
return -2;
}
struct sockaddr_in cin;
cin.sin_family = AF_INET;
cin.sin_addr.s_addr = inet_addr(sSvrIp);
cin.sin_port = htons(nSvrPort);
if (connect(client, (struct sockaddr *)&cin, sizeof(cin)) == SOCKET_ERROR)
{
closesocket(client);
WSACleanup();
return -3;
}
_Bind bind;
bind.head.nMsgLen = sizeof(_Bind);
bind.head.nCmdId = SGIP_BIND;
bind.head.nSeqNum.nSrcNodeNum = 3010012345;
bind.head.nSeqNum.nDateTime = atoi(PackTime(&CTime::GetCurrentTime()));
bind.head.nSeqNum.nSeqId = 0;
bind.nLgType = 1;
strcpy(bind.sLgName, "testuser");
strcpy(bind.sLgPwd, "testpwd");
strcpy(bind.sReserved, "");
if (send(client, (char *)&bind, sizeof(_Bind), 0) == SOCKET_ERROR)
{
closesocket(client);
WSACleanup();
return -4;
}
_BindResp bindResp;
recv(client, (char *)&bindResp, sizeof(_BindResp), 0);
if (bindResp.nResult != 0)
{
return -5;
}
g_client = client;
return 0;
}
是这样写吗?
其中recv返回模拟网关关闭连接,我想可能是包结构填充不对,bind.head.nSeqNum.nSrcNodeNum = 3010012345;是sp接入号吗?
调用函数时char * sSvrIp, int nSvrPort也与模拟网关的一样。
为什么模拟网关老是关闭连接呢?