首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

用SendTo函数发送数据返回异常WSAENOTSOCK,什么原因呢

2012-01-06 
用SendTo函数发送数据返回错误WSAENOTSOCK,什么原因呢?函数代码如下:voidESocket::sendToserver(inttype,C

用SendTo函数发送数据返回错误WSAENOTSOCK,什么原因呢?
函数代码如下:
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();
}

[解决办法]
你自已的socket句柄不效,也就是你邦定本地的那个套接字句柄。

在发送之前先判断一下本地的套接字句柄。
[解决办法]
自始至终,没看到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);

[解决办法]
你的这个ESocket类的初始化函数(init|create|构造函数)里边是否有

类似s = socket(AF_INET, SOCK_DGRAM, 0);这样的代码。可能需要显式的调用一下初始化函数。

另外你的代码
sendcharacters = SendTo((const char*)&sendbuf,sizeof(sendbuf),SERVER_PORT,serverip);
errorcode = GetLastError();

调用GetLastError()是不对的,应该调用WSAGetLastError()

热点排行