最新小弟在做蓝牙Socket编程,蓝牙设备作为Client时候,与另一设备进行通信,双方能建立连接,并且发送与接收消息都正常.可是一分钟后,双方通信就自动断开了,查看程序是收到了FD_CLOSE命令.请问具体是什么原因使通信产生FD_CLOSE命令?不胜感激!!!!
附程序:
客户端:
void CBtCmderDlg::OnButtonClient() 
{
// TODO: Add your control notification handler code here
BLUETOOTH_SELECT_DEVICE_PARAMS btsdp;
WSADATA wsaData;
SOCKADDR_BTH SockAddr = {0}; btsdp.dwSize = sizeof(btsdp);
btsdp.cNumOfClasses = 0;
btsdp.prgClassOfDevices = NULL;
btsdp.pszInfo = NULL;
btsdp.hwndParent = NULL;
btsdp.fForceAuthentication = FALSE;
btsdp.fShowAuthenticated = TRUE;
btsdp.fShowRemembered = TRUE;
btsdp.fShowUnknown = TRUE;
btsdp.fAddNewDeviceWizard = FALSE;
btsdp.fSkipServicesPage = FALSE;
btsdp.pfnDeviceCallback = NULL;
btsdp.pvParam = NULL;
btsdp.cNumDevices = 0; if (WSAStartup(WINSOCK_VERSION, &wsaData) != 0)
{
m_strStatus = "WSAStartup Error";
UpdateData(FALSE);
return;
}
if (wsaData.wVersion != WINSOCK_VERSION)
{
WSACleanup();
m_strStatus = "Version Error";
UpdateData(FALSE);
return;
}
if (!BluetoothSelectDevices(&btsdp))
{
WSACleanup();
m_strStatus = "Select Device Fail";
UpdateData(FALSE);
return;
} if (btsdp.cNumDevices != 1)
{
BluetoothSelectDevicesFree(&btsdp);
WSACleanup();
m_strStatus = "(btsdp.cNumDevices != 1) Error";
UpdateData(FALSE);
return;
} CString strTemp;
for (int i = 5; i >0 ; i--) 
{
strTemp.Format("%X",btsdp.pDevices->Address.rgBytes[i]);
if(strTemp.GetLength() == 1)
strTemp.Insert(0,'0');
m_strAddr = m_strAddr + strTemp + CString(" : ");
} strTemp.Format("%X ",btsdp.pDevices->Address.rgBytes[0]);
m_strAddr += strTemp; m_strName = &(btsdp.pDevices->szName[0]); SockAddr.addressFamily = AF_BTH;
SockAddr.btAddr = btsdp.pDevices->Address.ullLong;
SockAddr.port = 2;
BluetoothSelectDevicesFree(&btsdp); btClientSocket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); if (btClientSocket == INVALID_SOCKET)
{
WSACleanup();
m_strStatus = "socket Function Error";
UpdateData(FALSE);
return;
} unsigned long ul = 1;
if(SOCKET_ERROR == (ioctlsocket(btClientSocket,FIONBIO,(unsigned long *)&ul)))
{
WSACleanup();
m_strStatus = "Set socket non-bolking mode fail";
UpdateData(FALSE);
return; } if(connect(btClientSocket, (SOCKADDR *) &SockAddr, sizeof(SockAddr)) == 0)
m_strStatus = "Connected";
else
{
if (WSAGetLastError() != WSAEWOULDBLOCK)
{
OnButtonDisconnect();
m_strStatus = "Connect Fail";
UpdateData(FALSE);
return;
}
else
m_strStatus = "Connecting";
}

if(SOCKET_ERROR == (WSAAsyncSelect(btClientSocket,m_hWnd,WM_BTCLIENTEVENT,
FD_CONNECT|FD_CLOSE|FD_READ)))
m_strStatus = "WSAAsyncSelect() Function Error";

UpdateData(FALSE);
}============================
I/O管理:
LRESULT CBtCmderDlg::OnBtClientEvent(WPARAM wParam, LPARAM lParam)
{
if(WSAGETSELECTERROR(lParam))
{
OnButtonDisconnect();
MessageBox(_T("Socket event error"),NULL,MB_OK);
return 0;
}
switch(WSAGETSELECTEVENT(lParam))
{
case FD_CONNECT:
{
m_strStatus = "Connected";
break;
} case FD_CLOSE:
{
m_strStatus = "Disconnected";
break;
}
case FD_READ:
{
char DatBuf[512] = "0";
recv(btClientSocket, &DatBuf[0],512, 0);
m_strRecv = DatBuf;
break;
}
default:
break;
} UpdateData(FALSE);
return 0;
}
==================================
请各位大虾多多指教,谢谢!!!!!!!!!!