用如下语句创建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函数有什么问题?
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函数有什么问题?
解决方案 »
- 帮忙看看怎样使用这个类库
- 求助:内存泄漏(只有10行不到的代码)
- windows98下程序读取自身大小时为何会出错
- 我得第二个问题??:能不能在cell 模板上绘制图形????
- 在别的类中用多媒体定时器类,定义对象时,需要在构造函数中赋值,怎么赋值啊?
- vc++ 6.0新手问题!!!!!!!!!!!!!!!!!!?????
- 求:Inside Visual C++(Visual C++技术内幕)第四版(潘爱民)的源代码
- 我用隐式调用dll,但有时需要在没有dll的环境下运行,怎么办?谢谢大家给个解答!
- 自绘中为什么BMP图片可以切换,但是PNG却不行?
- VFP菜鸟级问题:用.mpr还要用.mnt?
- 直接用Rectangle画矩形为何出现两个矩形了?
- 如何将集合类的内容作为形参传递?
你的m_Ip和m_Port是多少?
ZeroMemory(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(nPort);unsigned long nAddress = inet_addr(strIPAddress);
//如果是域名, 这里要进行解析. 些处省略.
addr.sin_addr.S_un.S_addr = nAddress;
http://blog.csdn.net/elysium
所以建议使用inet_addr后测试一下addr.sin_addr.s_addr的值是否正确.if(INADDR_NONE == addr.sin_addr.s_addr)
报错();如果出错.将参数转换成char*类型就可以了.
{
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);
addr.sin_family = AF_INET; 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;
}