客户端发送数据,而服务器端无数据到达,不知下面的代码错在哪?!
服务器端:接收数据*******************
void CGetUdpDataDlg::OnOk()
{
m_socketS=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(INVALID_SOCKET==m_socketS)
{
MessageBox("服务器端的套接字创建失败!");
return FALSE;
}
sockaddr_in addrsock;
addrsock.sin_family=AF_INET;
addrsock.sin_port=(WORD)htons(6543);
addrsock.sin_addr.s_addr = inet_addr("10.130.6.14");
int retval=bind(m_socketS, (SOCKADDR*)&addrsock, sizeof(SOCKADDR));
if(SOCKET_ERROR==retval)
{
closesocket(m_socketS);
MessageBox("服务器端的绑定套接字失败!");
return FALSE;
}
struct sockaddr_in clientAddr;
int lengthOfClient = sizeof(struct sockaddr_in);
int noOfBytes;
char message[MAX_LENGTH];
while (1)
{
int length = lengthOfClient;
int lengthOfMessage = 0;
noOfBytes = recvfrom(m_socketS, message, MAX_LENGTH, 0,(struct sockaddr *) &clientAddr, &length);
MessageBox("get data");
sendto(m_socketS, message, lengthOfMessage, 0, (struct sockaddr *) &clientAddr, length);
}
return TRUE;
}
客户端:发送数据*************************************
void CSendUDPPackageDlg::OnButtonConnect()
{
m_socketC=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(INVALID_SOCKET==m_socketC)
{
MessageBox("客户端的套接字创建失败!");
return ;
}
sockaddr_in addrsock;
addrsock.sin_family=AF_INET;
addrsock.sin_port=(WORD)htons(6001);
addrsock.sin_addr.s_addr = inet_addr("10.130.6.14");
int retval=bind(m_socketC, (SOCKADDR*)&addrsock, sizeof(SOCKADDR));
if(SOCKET_ERROR==retval)
{
closesocket(m_socketC);
MessageBox("客户端的绑定套接字失败!");
return ;
}
sockaddr_in serverAddr;
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=(WORD)htons(6543);
serverAddr.sin_addr.s_addr = inet_addr("10.130.6.14");
char message[MAX_LENGTH];
strcpy(message,"1234567890-1234567890-1234567890-1234567890");
int length=0;
while (1)
{
retval=sendto(m_socketC, message, strlen(message), 0,(struct sockaddr *) &serverAddr, length);
if(retval==SOCKET_ERROR)
{
retval=WSAGetLastError();
return;
}
retval=recvfrom(m_socketC, message, MAX_LENGTH, 0, NULL, NULL);
//进行数据处理
}
}
服务器端:接收数据*******************
void CGetUdpDataDlg::OnOk()
{
m_socketS=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(INVALID_SOCKET==m_socketS)
{
MessageBox("服务器端的套接字创建失败!");
return FALSE;
}
sockaddr_in addrsock;
addrsock.sin_family=AF_INET;
addrsock.sin_port=(WORD)htons(6543);
addrsock.sin_addr.s_addr = inet_addr("10.130.6.14");
int retval=bind(m_socketS, (SOCKADDR*)&addrsock, sizeof(SOCKADDR));
if(SOCKET_ERROR==retval)
{
closesocket(m_socketS);
MessageBox("服务器端的绑定套接字失败!");
return FALSE;
}
struct sockaddr_in clientAddr;
int lengthOfClient = sizeof(struct sockaddr_in);
int noOfBytes;
char message[MAX_LENGTH];
while (1)
{
int length = lengthOfClient;
int lengthOfMessage = 0;
noOfBytes = recvfrom(m_socketS, message, MAX_LENGTH, 0,(struct sockaddr *) &clientAddr, &length);
MessageBox("get data");
sendto(m_socketS, message, lengthOfMessage, 0, (struct sockaddr *) &clientAddr, length);
}
return TRUE;
}
客户端:发送数据*************************************
void CSendUDPPackageDlg::OnButtonConnect()
{
m_socketC=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(INVALID_SOCKET==m_socketC)
{
MessageBox("客户端的套接字创建失败!");
return ;
}
sockaddr_in addrsock;
addrsock.sin_family=AF_INET;
addrsock.sin_port=(WORD)htons(6001);
addrsock.sin_addr.s_addr = inet_addr("10.130.6.14");
int retval=bind(m_socketC, (SOCKADDR*)&addrsock, sizeof(SOCKADDR));
if(SOCKET_ERROR==retval)
{
closesocket(m_socketC);
MessageBox("客户端的绑定套接字失败!");
return ;
}
sockaddr_in serverAddr;
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=(WORD)htons(6543);
serverAddr.sin_addr.s_addr = inet_addr("10.130.6.14");
char message[MAX_LENGTH];
strcpy(message,"1234567890-1234567890-1234567890-1234567890");
int length=0;
while (1)
{
retval=sendto(m_socketC, message, strlen(message), 0,(struct sockaddr *) &serverAddr, length);
if(retval==SOCKET_ERROR)
{
retval=WSAGetLastError();
return;
}
retval=recvfrom(m_socketC, message, MAX_LENGTH, 0, NULL, NULL);
//进行数据处理
}
}
struct sockaddr_in clientAddr;
noOfBytes = recvfrom(m_socketS, message, MAX_LENGTH, 0,(struct sockaddr *) &clientAddr, &length);
clientAddr 没有添内容,应该添CLIENT的地址和端口
if(retval==SOCKET_ERROR)
{
retval=WSAGetLastError();
return;
}
WSAGetLastError()得到的错误代码是10014,查MSDN知为Bad address,但我的机器的ip地址没错,查看sockaddr_in类型的变量的内容,4个字节的内容正确!
sendto(m_socketS, message, lengthOfMessage, 0, (struct sockaddr *) &clientAddr, length);