sm_ch
December 6th, 2004, 02:06 AM
PC A have 2 adapters,One adapter's IP is "192.168.0.95";another is "192.168.0.188".Everything is well and sendto return the bytes right.but the application in PC B can received from "192.168.0.188" but not "192.168.0.95".I can ping "192.168.0.95" from PC B.I disabled 192.168.0.188 and can copy files from PC B. indicates that the network status is good.
Anyone help me? thanks a lot.
the code is:
int iReturn;
SOCKET socketResponse;
sockaddr_in stSendToAddress;
BOOL bSocket = TRUE;
bool opt = true;
int nlen = sizeof(stSendToAddress);
stSendToAddress.sin_family = AF_INET;
stSendToAddress.sin_addr.s_addr = INADDR_BROADCAST;
stSendToAddress.sin_port = htons(68);
socketResponse = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
iReturn = setsockopt(socketResponse,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,sizeof(opt));
sockaddr_in stAdapterAddress;
memset(&stAdapterAddress,0,sizeof(stAdapterAddress));
stAdapterAddress.sin_family = AF_INET;
//different only in m_szDHCPIP
stAdapterAddress.sin_addr.s_addr = inet_addr(m_szDHCPIP);
stAdapterAddress.sin_port = htons(68);
if(WaitForSingleObject(theApp.m_hMutex,20000) == WAIT_OBJECT_0)
{
iReturn = bind(socketResponse,(sockaddr *)&stAdapterAddress,sizeof(sockaddr_in));
if(iReturn==SOCKET_ERROR)
{
DWORD dwError = WSAGetLastError();
TRACE("bind socket error.\r\n");
}
iReturn = sendto(socketResponse,(const char*)&stDHCPResponsePacket,BOOTP_MIN_LEN,0,(sockaddr*)&stSendToAddress,nlen);
if(iReturn==SOCKET_ERROR)
{
TRACE("send error\r\n");
// AfxMessageBox("send error\r\n");
}
else
{
// AfxMessageBox("send\r\n");
}
closesocket(socketResponse);
ReleaseMutex(theApp.m_hMutex);
}
Anyone help me? thanks a lot.
the code is:
int iReturn;
SOCKET socketResponse;
sockaddr_in stSendToAddress;
BOOL bSocket = TRUE;
bool opt = true;
int nlen = sizeof(stSendToAddress);
stSendToAddress.sin_family = AF_INET;
stSendToAddress.sin_addr.s_addr = INADDR_BROADCAST;
stSendToAddress.sin_port = htons(68);
socketResponse = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
iReturn = setsockopt(socketResponse,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,sizeof(opt));
sockaddr_in stAdapterAddress;
memset(&stAdapterAddress,0,sizeof(stAdapterAddress));
stAdapterAddress.sin_family = AF_INET;
//different only in m_szDHCPIP
stAdapterAddress.sin_addr.s_addr = inet_addr(m_szDHCPIP);
stAdapterAddress.sin_port = htons(68);
if(WaitForSingleObject(theApp.m_hMutex,20000) == WAIT_OBJECT_0)
{
iReturn = bind(socketResponse,(sockaddr *)&stAdapterAddress,sizeof(sockaddr_in));
if(iReturn==SOCKET_ERROR)
{
DWORD dwError = WSAGetLastError();
TRACE("bind socket error.\r\n");
}
iReturn = sendto(socketResponse,(const char*)&stDHCPResponsePacket,BOOTP_MIN_LEN,0,(sockaddr*)&stSendToAddress,nlen);
if(iReturn==SOCKET_ERROR)
{
TRACE("send error\r\n");
// AfxMessageBox("send error\r\n");
}
else
{
// AfxMessageBox("send\r\n");
}
closesocket(socketResponse);
ReleaseMutex(theApp.m_hMutex);
}