函数代码如下:
void ESocket::sendToserver(int type,CString mpass,CString mid)
{
Clogin logdlg;
stMessage sendbuf;
sendbuf.iMessageType = LOGIN;
//logdlg.m_PASS = logdlg.GetDlgItemText
// logdlg.UpdateData(TRUE);
logdlg.m_PASS = mpass;
logdlg.m_ID = mid;
for(int i = 0;i<logdlg.m_PASS.GetLength();i++)
sendbuf.message.loginmember.password[i] = logdlg.m_PASS[i];
for(int j = 0;j<logdlg.m_ID.GetLength();j++)
sendbuf.message.loginmember.userName[j] = logdlg.m_ID[j];//
/////////////////////////////////////////
char L_serverip[10] = "127.0.0.1";
memcpy(serverip,L_serverip,10);
sockaddr_in server;
server.sin_addr.S_un.S_addr = inet_addr(serverip);
server.sin_family = AF_INET;
server.sin_port = htons(SERVER_PORT);
int sendcharacters;
static int errorcode;
//sendcharacters = SendTo((const char*)&sendbuf,sizeof(sendbuf),(const SOCKADDR*)&server,sizeof(server));//向服务器发送登陆信息
sendcharacters = SendTo((const char*)&sendbuf,sizeof(sendbuf),SERVER_PORT,serverip);
errorcode = GetLastError();
}

解决方案 »

  1.   

    你自已的socket句柄不效,也就是你邦定本地的那个套接字句柄。在发送之前先判断一下本地的套接字句柄。
      

  2.   

    自始至终,没看到socket的影子阿据我判断,你的SendTo底层包含了对WinSock函数send或者sendto的调用
    而send和sendto函数的第一个参数就是SOCKET s;
    这个SOCKET s是通过调用socket函数返回的,例如:
    SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if(s == INVALID_HANDLE)
    {
       //error
       return;
    }
    int retVal = send(s, lpBuf, bufLen);
      

  3.   

    你的这个ESocket类的初始化函数(init|create|构造函数)里边是否有类似s = socket(AF_INET, SOCK_DGRAM, 0);这样的代码。可能需要显式的调用一下初始化函数。另外你的代码
    sendcharacters = SendTo((const char*)&sendbuf,sizeof(sendbuf),SERVER_PORT,serverip);
    errorcode = GetLastError();调用GetLastError()是不对的,应该调用WSAGetLastError()