蓝牙Socket编程与FD_CLOSE

drjojo 2006-08-03 06:57:33
最新小弟在做蓝牙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;
}
==================================
请各位大虾多多指教,谢谢!!!!!!!!!!
...全文
347 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Torch009 2007-03-03
  • 打赏
  • 举报
回复
up
greenery 2007-03-01
  • 打赏
  • 举报
回复
顶。
drjojo 2006-08-04
  • 打赏
  • 举报
回复
什么情况下SOCKET通信会产生FD_CLOSE命令?
drjojo 2006-08-04
  • 打赏
  • 举报
回复
对方是一个串口的蓝牙设备,用2个该设备并调用他们的UI进行相连是没有问题的.
nuaawenlin 2006-08-03
  • 打赏
  • 举报
回复
是不是对端close了????
内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析与算法验证,深入理解每一步的推理依据。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧