我写了一个UDP的通讯类。
但是,测试中老是发现Sendto()的时候总是报10047的错误,我知道这是端口被占用了。
UDP的协议我不太清楚,很久没有写了,请问我如果我绑定监听12000端口,是不是Sendto的时候就不能使用这个端口发送数据呢?我的监听代码
m_MainSocket                = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(INVALID_SOCKET == m_MainSocket)
{
return FALSE;
} skaddr.sin_family           = AF_INET;
skaddr.sin_port             = htons(nPort);
skaddr.sin_addr.S_un.S_addr = INADDR_ANY;
if(SOCKET_ERROR == bind(m_MainSocket, (struct sockaddr *)&skaddr, sizeof(skaddr)))
{
int nErrorCode = WSAGetLastError();
return FALSE;
} nFromLen = sizeof(m_skto); while(TRUE)
{
if(SOCKET_ERROR != recvfrom(m_MainSocket, m_RecvBuff, MAX_CHAR_BUFF, 0, (struct sockaddr *)&m_skto, &nFromLen))
{
//recv data ok.
}
else
{
int nErrorCode = WSAGetLastError();
closesocket(m_MainSocket);
m_MainSocket = INVALID_SOCKET;
WSACleanup();
return FALSE;
}
}这个应该没有问题,我测试过了。监听的是12000端口。
然后我使用sendto()往一个机器上发送消息。
if(INVALID_SOCKET == m_SendSocket)
{
m_SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
} if(SOCKET_ERROR == sendto(m_SendSocket, szSendBuff, strlen(szSendBuff) + 1, 0, (struct sockaddr *)&m_skto, sizeof(m_skto)))
{
int nError = WSAGetLastError();
return FALSE;
}m_skto结构里面包含的是客户端地址和客户端12000端口。
结果总是报10047错误,请大家帮帮忙,帮我看一下是什么问题。