window 蓝牙开发资料真的是比较少,而且功能比较单一。使用window自带的蓝牙重连接真的是太慢了。找不到好的解决方法,很让人头痛呀!
下面提供的这点代码,也只是一个简单的功能,有这方面研究的朋友,希望能多多交流,多多指教

需要先包含几个头文件

#include <afxsock.h>
#include <ws2bth.h>
#include <BluetoothAPIs.h>
#pragma comment(lib,"Irprops.lib")
#include <string>
using namespace std;
ULONGLONG g_ulRemoteAddr = 0;
WCHAR strGUID[]=L"00001101-0000-1000-8000-00805f9b34fb";
CString g_strRecv = _T("");
SOCKET g_socketClient = INVALID_SOCKET;
CString g_strBthName=_T("");BOOL g_bWaitRecvData=TRUE;// CBlueToothTestDlg dialog
CBlueToothTestDlg::CBlueToothTestDlg(CWnd* pParent /*=NULL*/): CDialog(CBlueToothTestDlg::IDD, pParent)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_bTestFinish = TRUE;
}void CBlueToothTestDlg::DoDataExchange(CDataExchange* pDX)
{CDialog::DoDataExchange(pDX);DDX_Control(pDX, IDC_EDIT_SHOW, m_editShow);DDX_Control(pDX, IDC_EDIT_INPUT, m_editInput);DDX_Control(pDX, IDC_BUTTON_SEND, m_btnSend);DDX_Control(pDX, IDC_BTN_OPEN, m_btnOpen);DDX_Control(pDX, IDC_BTN_CLOSE, m_btnClose);DDX_Control(pDX, IDC_CHECK_REPEATSEND, m_CheckRepeat);
}BEGIN_MESSAGE_MAP(CBlueToothTestDlg, CDialog)//}}AFX_MSG_MAPON_BN_CLICKED(IDC_BUTTON_SEND, &CBlueToothTestDlg::OnBnClickedButtonSend)ON_MESSAGE(WM_BLUETOOTH_MSG, &CBlueToothTestDlg::OnBlueToothMsg)ON_BN_CLICKED(IDC_BTN_OPEN, &CBlueToothTestDlg::OnBnClickedBtnOpen)ON_BN_CLICKED(IDC_BTN_CLOSE, &CBlueToothTestDlg::OnBnClickedBtnClose)ON_WM_TIMER()
END_MESSAGE_MAP()// CBlueToothTestDlg message handlers
CString string2CString(string strSrc)
{CString strTarge = _T("");TCHAR *pTemp = new TCHAR[strSrc.size() + 1];if (NULL == pTemp){return strTarge;}MultiByteToWideChar(0,0,strSrc.c_str(),-1,pTemp,strSrc.size() + 1);   strTarge = pTemp;if (NULL != pTemp)  {delete []pTemp;pTemp = NULL; }return strTarge;
}CString TranslateErrorCode ( DWORD dwErrorCode )
{CString csError;LPVOID pv;FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,dwErrorCode,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&pv,0,NULL);if(pv){csError = (LPCTSTR)pv;LocalFree ( pv );}CString strCode = _T("");strCode.Format(_T("%ld"),dwErrorCode);csError = strCode + _T(" : ") + csError;return csError;
}int GetGUID(WCHAR *psz, GUID *pGUID)
{int data1, data2, data3;int data4[8];if (11 ==  swscanf(psz, L"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\n",&data1, &data2, &data3,&data4[0], &data4[1], &data4[2], &data4[3], &data4[4], &data4[5], &data4[6], &data4[7])) {pGUID->Data1 = data1;pGUID->Data2 = data2 & 0xffff;pGUID->Data3 = data3 & 0xffff;for (int i = 0 ; i < 8 ; ++i)pGUID->Data4[i] = data4[i] & 0xff;return 0;}return -1;
}int ReadBthSeqFile(CString strTempName)//读取序列号文件数据
{strTempName = _T("bluetoothName.txt");CStdioFile tempFile;BOOL bRet = tempFile.Open(strTempName, CFile::modeReadWrite);if (!bRet){        return -1;}CString strReadLine=_T("");int tempLength = 0;while (1){tempFile.ReadString(strReadLine);tempLength += strReadLine.GetLength()+1;if (strReadLine.GetLength() == 0)break;//AfxMessageBox(strReadLine);g_strBthName = strReadLine;}tempFile.Close();return 0;
}int FindTargetBlueTooth()
{int iFindRet = 0;WSAQUERYSET wsaq;HANDLE      hLookup =   NULL;union{CHAR buf[5000];double __unused; // ensure proper alignment};LPWSAQUERYSET pwsaResults = (LPWSAQUERYSET) buf;DWORD dwSize = sizeof(buf);memset(&wsaq,0,sizeof(wsaq));wsaq.dwSize = sizeof(wsaq);wsaq.dwNameSpace = NS_BTH;wsaq.lpcsaBuffer = NULL;if (ERROR_SUCCESS != WSALookupServiceBegin (&wsaq, LUP_CONTAINERS, &hLookup)){return 0;}ZeroMemory(pwsaResults, sizeof(WSAQUERYSET));pwsaResults->dwSize = sizeof(WSAQUERYSET);pwsaResults->dwNameSpace = NS_BTH;pwsaResults->lpBlob = NULL;BLUETOOTH_DEVICE_INFO bdi = { sizeof(BLUETOOTH_DEVICE_INFO) };while (ERROR_SUCCESS == WSALookupServiceNext (hLookup, LUP_RETURN_NAME | LUP_RETURN_ADDR, &dwSize, pwsaResults)){
//      ASSERT (pwsaResults->dwNumberOfCsAddrs == 1);ULONGLONG ulAddr =   ((SOCKADDR_BTH *)pwsaResults->lpcsaBuffer->RemoteAddr.lpSockaddr)->btAddr;CString strName  =   pwsaResults->lpszServiceInstanceName;if(strName == /*_T("HWAPP")*/g_strBthName){g_ulRemoteAddr = ulAddr;//获取其它信息memset(&bdi,0,sizeof(BLUETOOTH_DEVICE_INFO));bdi.Address.ullLong = ulAddr;bdi.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);//importantDWORD dwGetInfo = BluetoothGetDeviceInfo(NULL,&bdi);if(ERROR_SUCCESS == dwGetInfo){//类型ULONG ulType = bdi.ulClassofDevice;//7936//被记住                BOOL bRemember = bdi.fRemembered;//已配对BOOL bPaired = bdi.fAuthenticated;//已连接BOOL bConnected = bdi.fConnected;if(bPaired)iFindRet = 1;elseiFindRet = 2;break;}else{AfxMessageBox(TranslateErrorCode(dwGetInfo));}}}WSALookupServiceEnd(hLookup);return iFindRet;
}UINT ScanBlueToothDeviceProc(LPVOID lpParam)
{int iScanRet = FindTargetBlueTooth();//0表示没有发现,1表示发现且配对,2表示发现但未配对CBlueToothTestDlg* pDlg = (CBlueToothTestDlg*)lpParam;pDlg->PostMessage(WM_BLUETOOTH_MSG,1,iScanRet);return 0;
}UINT RecvMsgProc(LPVOID lpParam)
{CBlueToothTestDlg* pDlg = (CBlueToothTestDlg*)lpParam;char pbuf[MAX_MESSAGE_SIZE] = {0};while(1){memset(pbuf,0,MAX_MESSAGE_SIZE);int cbBytesRecd = recv (g_socketClient, pbuf, MAX_MESSAGE_SIZE, 0);if (cbBytesRecd == SOCKET_ERROR) {pDlg->PostMessage(WM_BLUETOOTH_MSG,2,0);return WSAGetLastError();}else if(cbBytesRecd > 0){string sRecv = pbuf;g_strRecv = string2CString(sRecv);pDlg->PostMessage(WM_BLUETOOTH_MSG,2,1);g_bWaitRecvData = TRUE;}}return 0;
}UINT ConnectDeviceProc(LPVOID lpParam)
{CBlueToothTestDlg* pDlg = (CBlueToothTestDlg*)lpParam;g_socketClient = socket (AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);if (g_socketClient == INVALID_SOCKET) {pDlg->PostMessage(WM_BLUETOOTH_MSG,3,1);return 0;}GUID ServerGuid;if(GetGUID(strGUID, &ServerGuid)){pDlg->PostMessage(WM_BLUETOOTH_MSG,3,2);g_socketClient = INVALID_SOCKET;return 0;}SOCKADDR_BTH sa;memset (&sa, 0, sizeof(sa));sa.addressFamily = AF_BTH;sa.port = 6001;sa.serviceClassId = ServerGuid;sa.btAddr = g_ulRemoteAddr;Sleep(200);int iConnect = 0 ;for (iConnect = 0 ; iConnect < 3 ; iConnect ++)//尝试连接3次{if (connect (g_socketClient, (SOCKADDR *)&sa, sizeof(sa)) == SOCKET_ERROR) {DWORD dwError = GetLastError();if(dwError == WSAETIMEDOUT){pDlg->PostMessage(WM_BLUETOOTH_MSG,4,iConnect);Sleep(200);continue;}g_socketClient = INVALID_SOCKET;AfxMessageBox(TranslateErrorCode(dwError));pDlg->PostMessage(WM_BLUETOOTH_MSG,3,3);//其他错误return 0;}elsebreak;}if(iConnect == 3)//超时错误{g_socketClient = INVALID_SOCKET;pDlg->PostMessage(WM_BLUETOOTH_MSG,3,4);}elsepDlg->PostMessage(WM_BLUETOOTH_MSG,3,0);return 0;
}UINT TestConnectProc(LPVOID lpParam)
{CBlueToothTestDlg* pDlg = (CBlueToothTestDlg*)lpParam;int iFindBlueTooth = FindTargetBlueTooth();if(iFindBlueTooth != 1){pDlg->PostMessage(WM_BLUETOOTH_MSG,5,5);return 0;}SOCKET sock = socket (AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);if (sock == INVALID_SOCKET) {pDlg->PostMessage(WM_BLUETOOTH_MSG,5,1);return 0;}GUID ServerGuid;if(GetGUID(strGUID, &ServerGuid)){pDlg->PostMessage(WM_BLUETOOTH_MSG,5,2);return 0;}SOCKADDR_BTH sa;memset (&sa, 0, sizeof(sa));sa.addressFamily = AF_BTH;sa.port = 5001;sa.serviceClassId = ServerGuid;sa.btAddr = g_ulRemoteAddr;Sleep(200);int iConnect = 0 ;for (iConnect = 0 ; iConnect < 6 ; iConnect ++)//尝试连接6次{if (connect (sock, (SOCKADDR *)&sa, sizeof(sa)) == SOCKET_ERROR) {DWORD dwError = GetLastError();if(dwError == WSAETIMEDOUT){pDlg->PostMessage(WM_BLUETOOTH_MSG,6,iConnect);Sleep(200);continue;}AfxMessageBox(TranslateErrorCode(dwError));pDlg->PostMessage(WM_BLUETOOTH_MSG,5,3);//其他错误return 0;}elsebreak;}if(iConnect == 6)//超时错误pDlg->PostMessage(WM_BLUETOOTH_MSG,5,4);else{closesocket(sock);pDlg->PostMessage(WM_BLUETOOTH_MSG,5,0);//能连接上}return 0;
}BOOL CBlueToothTestDlg::OnInitDialog()
{......// TODO: Add extra initialization herem_editInput.EnableWindow(FALSE);m_btnSend.EnableWindow(FALSE);m_btnOpen.EnableWindow(FALSE);m_btnClose.EnableWindow(FALSE);SetDlgItemText(IDC_STATIC_TIP,_T("正在检测蓝牙是否连接,请稍候..."));
//  SetTimer(8,5000,NULL);CString str=_T("");ReadBthSeqFile(str);AfxBeginThread(ScanBlueToothDeviceProc,this);return TRUE;  // return TRUE  unless you set the focus to a control
}string CBlueToothTestDlg::CString2string(CString str)
{string strTarge = "";int nLength = str.GetLength();int nBytes = WideCharToMultiByte(0,0,str,nLength,NULL,0,NULL,NULL);char* VoicePath = new char[ nBytes + 1];memset(VoicePath,0,nLength + 1);WideCharToMultiByte(0, 0, str, nLength, VoicePath, nBytes, NULL, NULL); VoicePath[nBytes] = 0;strTarge = VoicePath;return strTarge;
}void CBlueToothTestDlg::OnBnClickedButtonSend()
{// TODO: Add your control notification handler code hereCString strInput = _T("");GetDlgItemText(IDC_EDIT_INPUT,strInput);BYTE m_pucPackBuffer[] = {0xd1, 0xee, 0x16, 0x00, 0xe9, 0xff, 0xf7, 0x01, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x43, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x44, 0x60, 0x02};UINT uiIsCheck = m_CheckRepeat.GetState();if (uiIsCheck)///主要是用于测试蓝牙盒子的通讯能力{strInput=m_pucPackBuffer;while (1){if (g_bWaitRecvData){int iSend = send (g_socketClient, (const char *)m_pucPackBuffer, 31, 0);DWORD dwError = GetLastError();if((iSend == 31) && (dwError == 0))AppendShowMsg(strInput, 1);elseAfxMessageBox(strInput+TranslateErrorCode(dwError));g_bWaitRecvData = FALSE;}}       }else{if(strInput.GetLength()){string strToSend = CString2string(strInput);int iSend = send (g_socketClient, strToSend.c_str(), strToSend.length(), 0);DWORD dwError = GetLastError();if((iSend == strInput.GetLength()) && (dwError == 0))AppendShowMsg(strInput,1);elseAfxMessageBox(strInput+TranslateErrorCode(dwError));}}
}LRESULT CBlueToothTestDlg::OnBlueToothMsg(WPARAM wParam,LPARAM lParam)
{int iMsgType = (int)wParam;int iMsgValue = (int)lParam;if(iMsgType == 1)//扫描蓝牙,结果0表示没有发现,1表示发现且配对,2表示发现但未配对{switch (iMsgValue){case 0:SetDlgItemText(IDC_STATIC_TIP,_T("未发现目标蓝牙设备!"));            break;case 1:SetDlgItemText(IDC_STATIC_TIP,_T("已发现目标蓝牙设备,点击Connect按钮来连接蓝牙"));m_btnOpen.EnableWindow(TRUE);break;case 2:SetDlgItemText(IDC_STATIC_TIP,_T("已发现目标蓝牙设备,但未连接,请手动连接后再试"));           break;default:break;}   }else if(iMsgType == 2)//接收数据{if(iMsgValue == 0)SetDlgItemText(IDC_STATIC_TIP,_T("接收消息出错,接收线程退出,可能是连接已断开"));else if(iMsgValue == 1)AppendShowMsg(g_strRecv,2);}else if(iMsgType == 3)//连接蓝牙设备{switch (iMsgValue){case 0:SetDlgItemText(IDC_STATIC_TIP,_T("初始化通信完成,现在可以收发数据"));SetDlgItemText(IDC_EDIT_INPUT,_T("FoxwellGT80"));m_editInput.EnableWindow(TRUE);m_btnSend.EnableWindow(TRUE);AfxBeginThread(RecvMsgProc,this);m_btnOpen.EnableWindow(FALSE);m_btnClose.EnableWindow(TRUE);break;case 1:SetDlgItemText(IDC_STATIC_TIP,_T("初始化套接字失败!"));         break;case 2:SetDlgItemText(IDC_STATIC_TIP,_T("获取GUID失败!"));         break;case 3:SetDlgItemText(IDC_STATIC_TIP,_T("连接目标蓝牙设备失败!"));           break;case 4:SetDlgItemText(IDC_STATIC_TIP,_T("连接目标蓝牙设备失败!")+TranslateErrorCode(WSAETIMEDOUT));          break;default:            break;}   }else if(iMsgType == 4)//超时重试提示{CString strTimeOut = _T("");strTimeOut.Format(_T("连接超时,重试中...%d"),iMsgValue+1);SetDlgItemText(IDC_STATIC_TIP,strTimeOut);}else if(iMsgType == 5)//测试连接蓝牙设备{m_bTestFinish = TRUE;CTime tm = CTime::GetCurrentTime();CString strTime = _T("");strTime.Format(_T("%.2d%.2d%.2d"),tm.GetHour(),tm.GetMinute(),tm.GetSecond());switch (iMsgValue){case 0:SetWindowText(_T("蓝牙检测:已连接") + strTime);            break;case 1:SetWindowText(_T("蓝牙检测:初始化套接字失败") + strTime);           break;case 2:SetWindowText(_T("蓝牙检测:获取GUID失败!") + strTime);          break;case 3:SetWindowText(_T("蓝牙检测:其他错误!") + strTime);          break;case 4:SetWindowText(_T("蓝牙检测:连接超时,可能已断开") + strTime);         break;case 5:SetWindowText(_T("蓝牙检测:未连接") + strTime);            break;default:break;}           }else if(iMsgType == 6)//测试连接超时重试提示{CString strTimeOut = _T("");strTimeOut.Format(_T("蓝牙检测:重试中...%d"),iMsgValue+1);SetWindowText(strTimeOut);}return 0;
}void CBlueToothTestDlg::AppendShowMsg(CString strNewMsg, int iType)
{if(iType == 1)strNewMsg = _T("Req: ") + strNewMsg;else if(iType == 2)strNewMsg = _T("Ans: ") + strNewMsg;else if(iType == 3)strNewMsg = _T("Sys: ") + strNewMsg;CString strHave = _T("");GetDlgItemText(IDC_EDIT_SHOW,strHave);if(strHave.GetLength())strHave = strHave + _T("\r\n") + strNewMsg;elsestrHave = strNewMsg;SetDlgItemText(IDC_EDIT_SHOW,strHave);m_editShow.PostMessage(WM_VSCROLL,SB_BOTTOM,0);if(iType == 2)//自动发送{CString strInput = strNewMsg;if(strInput.GetLength()){strInput = _T("FOXWELL_") + strInput;string strToSend = CString2string(strInput);int iSend = send (g_socketClient, strToSend.c_str(), strToSend.length(), 0);DWORD dwError = GetLastError();if((iSend == strInput.GetLength()) && (dwError == 0)){AppendShowMsg(strInput,1);}elseAfxMessageBox(TranslateErrorCode(dwError));}}
}/******************************************************************************\
获取字符串形式的蓝牙地址
蓝牙地址 BLUETOOTH_ADDRESS 定义如下
union
{BTH_ADDR ullLong;BYTE     rgBytes[6];
};
BTH_ADDR 是一个 64 位的整数
假定蓝牙地址为 12:34:56:78:9A:BC 则 ullLong 为 0x0000123456789ABC
rgBytes 的内容为 BC 9A 78 56 34 12
\******************************************************************************/
CString CBlueToothTestDlg::AddrToStr(const void*pAddr)
{CString sAddress;if(pAddr){BLUETOOTH_ADDRESS Address;int         nBytes  =   sizeof(Address.rgBytes);TCHAR       szByte[8];const BYTE* pByte   =   (const BYTE*)pAddr + (nBytes - 1);for(int i = 0;i < nBytes;i++){_stprintf(szByte,_T(":%02x"),*pByte--);sAddress   +=   i ? szByte : (szByte + 1);}}return sAddress;
}void CBlueToothTestDlg::OnBnClickedBtnOpen()
{// TODO: Add your control notification handler code hereSetDlgItemText(IDC_STATIC_TIP,_T("正在初始化通信,请稍候..."));AfxBeginThread(ConnectDeviceProc,this);
}void CBlueToothTestDlg::OnBnClickedBtnClose()
{// TODO: Add your control notification handler code herem_btnOpen.EnableWindow(TRUE);m_btnClose.EnableWindow(FALSE);m_editInput.EnableWindow(FALSE);m_btnSend.EnableWindow(FALSE);closesocket(g_socketClient);g_socketClient = INVALID_SOCKET;
}void CBlueToothTestDlg::OnTimer(UINT_PTR nIDEvent)
{// TODO: Add your message handler code here and/or call defaultif(m_bTestFinish && (g_ulRemoteAddr != 0)){m_bTestFinish = FALSE;SetWindowText(_T("蓝牙检测:开始检测"));AfxBeginThread(TestConnectProc,this);}CDialog::OnTimer(nIDEvent);
}
最后释放,放入销毁函数内例如(BOOL CXXXApp::ExitInstance())
WSACleanup();

window 下蓝牙开发相关推荐

  1. linux 蓝牙脚本,linux下蓝牙开发(bluez应用)

    编译blueZ-5.25 需要先编译安装以下包: bluez-libs-3.36.tar.gz expat-2.1.0.tar.gz dbus-1.10.0.tar.gz glib-2.26.1.ta ...

  2. window下java开发环境安装

    首先请去Java的官网上下载,最好下载最新版本 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21 ...

  3. window下使用nw.js开发桌面应用程序环境的搭建

    安装node window下去node官网下载长期支持版本或者最新稳定版都可以. 按装nw用来管理和按装nw.js npm install -g nrm # 用来设置npm镜像地址 npm insta ...

  4. Flutter之window系统下配置开发环境以及在Android Studio里面运行hello word

    1 .window系统配置Flutter开发环境 1)下载Flutter的SDK 如果电脑安装了Git,直接到https://github.com/flutter/flutter/这里下载,但是需要翻 ...

  5. 第1章 Window下VSCode的C语言开发环境搭建 (一)

    文章目录 文档视频讲解链接地址 第01章 开发环境搭建 1.1 C语言开发环境搭建 1. 常用的C语言开发环境介绍 VC++ 6.0 VS 2019 Clion DevC++ vim编辑 VSCode ...

  6. win32下Qt5BLE蓝牙开发笔记

    BLE简介 BLE蓝牙是蓝牙2.0以上的蓝牙模块,经典蓝牙是蓝牙2.0以下的蓝牙.蓝牙分为客户端和服务器两端,经典蓝牙可以通过socket编程进行客户端与服务器之间的通信(与网络socket相似),B ...

  7. window下spark的安装和开发环境配置

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 由于Spark是用Scala来写的,所以Spark对Scala肯定是原生态支持的,因此这里以Scala为主来介绍Spark环境的搭建, ...

  8. android Ble4.0蓝牙开发之搜索慢、startLeScan()过时,6.0以上不需要定位权限也能快速搜索到蓝牙设备

    项目中需要用到android Ble蓝牙4.0开发技术,于是开启了蓝牙填坑之旅,说实话,蓝牙开发坑真多,跳出一个又进入下一个,每次遇到 问题,就觉得不可能解决了,还好在自己的摸索中,都一一的化解了,以 ...

  9. Android 蓝牙开发(扫描设备、绑定、解绑)Kotlin版

    Kotlin版 蓝牙开发 (扫描设备.绑定.解绑) 前言 运行效果图 正文 ① 配置项目 ② 布局和样式 ③ 编码 1. 通知栏样式修改 2. 蓝牙设备列表适配器编写 3. 权限请求 4. 初始化蓝牙 ...

最新文章

  1. Android中asset和raw的区别
  2. 查看安卓APK源码破解
  3. R语言第九讲 验证集法
  4. 论文小综 | Attention in Graph Neural Networks
  5. android 工厂测试内存,Android性能测试之内存
  6. android开发之GPS定位详解
  7. Java复习第二弹!
  8. HCIP-三层网络架构实验
  9. 51单片机最小系统解读
  10. 千帆竞发势如虹 明光政策送东风 首届明光大赛来了
  11. 正负筛选(neo正向+HSV-tk负向)原理
  12. untiy的http请求
  13. 解决word,ppt,excel图标为空白(适用于新电脑)
  14. k-means像素聚类
  15. 蓝桥杯 我们的征途是星辰大海 Java
  16. 计算机除尘 注意事项,数码相机除尘注意事项
  17. 金额数字的格式化方法
  18. 【产品】小白进阶之产品经理所应具备的素质模型
  19. python 根据 url 批量下载文件到本地
  20. linux 写pci配置空间,[转载]应用程序中pci配置空间读写

热门文章

  1. Skynet服务器框架系列教程,skynet 服务端框架安装/运行
  2. 初级加密技术之块设备加密
  3. 2020牛客暑期多校训练营Decrement on the Tree(图论,set)
  4. 利用jquery-ajax实现局部刷新
  5. C++加载lib和dll的方法
  6. 5G连通性的未来:14个可能被颠覆的行业
  7. 漫威系列-《复联4》
  8. Java春招和秋招的区别_国企招聘,春招与秋招有何区别?错过秋招我该怎么办?...
  9. 使用FCEUX调试器寻找并修改游戏初始物品
  10. win10在BIOS开启Intel VT-x