还是socket api的udp问题,继续文
用如下语句创建socket
CMyUdpSocket是自己创建的类
SOCKET m_Socket;
CString m_Ip;//m_Ip="127.0.0.1"
int m_Port;//m_Port=1092
是类变量
int CMyUdpSocket::Create()//
{
// BOOL ret=TRUE,ret1=TRUE,bNoBlock=TRUE;
//struct sockaddr_in myAddr;
int myUdpSock = 0;
//memset((char *)&myAddr,0, sizeof(struct sockaddr_in));
myUdpSock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);//0);
if (myUdpSock == INVALID_SOCKET)
{
TRACE("failed when create my udp socket!port:%d\n",m_Port);
return -2;
}
m_hSocket=myUdpSock;
}
int CMyUdpSocket::SendTo(void *lpBuf, int nSize)
{
int nSend=SOCKET_ERROR;
struct sockaddr_in addr;
memset(&addr,0,sizeof(addr));
int tolen=sizeof(struct sockaddr_in);
addr.sin_addr.s_addr = inet_addr(m_Ip);
addr.sin_port=htons(m_Port);
nSend=sendto(m_hSocket,(char*)lpBuf,nSize,0,(struct sockaddr*)&addr,tolen);
if(nSend==SOCKET_ERROR)
m_bSockException=TRUE;
else
m_bSockException=FALSE;
return nSend;
}
使用这里的SendTo函数总出10047错误。
为了测试,又从CSocket继承了个类CUdpSocket
使用如下代码就没问题
CUdpSocket usk;
BOOL bErr=usk.Create(0,SOCK_DGRAM);
if (!bErr) return;
BOOL val=TRUE;
char lpBuf[21]="01234567890123456789";
int nErr=usk.SendTo(lpBuf,21,1092,"127.0.0.1");
if (SOCKET_ERROR==nErr)
{
nErr=WSAGetLastError();
TRACE("err:%d\n",nErr);
}
usk.Close();
usk.ShutDown();
请高手看下CMyUdpSocket的SendTo函数有什么问题?