<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                **AfxSocketInit** ```c++ 調用 CWinApp::InitInstance 中的重寫函數初始化此 Windows 套接字。 格式: BOOL AfxSocketInit( WSADATA* lpwsaData = NULL ); 返回值: 如果函數成功執行,則返回非零值,否則為0。 參數: lpwsaData 指向WSADATA結構的指針。如果lpwsaData不等于NULL,那么調用::WSAStartup將填充WSADATA結構。這個函數同時也保證在應用程序結束之前調用::WSACleanup。 說明: 在你重載的CWinApp::InitInstance函數中調用這個函數以初始化WindowsSockets。 在調用 AfxSocketInit() 之前,需要包含 afxsock.h 頭文件。 例子: if ( !AfxSocketInit() ) { AfxMessageBox( _T("Failed to Initialize Sockets"), MB_OK | MB_ICONSTOP); return FALSE; } ``` 1.初始化socket ```c++ CDialogEx::OnInitDialog(); BOOL b = m_sock.Create(8811,SOCK_DGRAM); DWORD nErr = GetLastError(); SetDlgItemText(IDC_IP,L"192.168.1.124"); SetDlgItemText(IDC_PORT,L"8811"); //可以通過工具-》錯誤查找,找到錯誤代碼提示 if (WSANOTINITIALISED == nErr) //1009 { AfxMessageBox(L"Successful WSAStartup not yet performed."); } if (WSAEADDRINUSE == nErr) // { AfxMessageBox(L"the specific address is committed"); } ``` 2.點擊發送 ```c++ void CUdpDlg::OnBnClickedOk() { //CDialogEx::OnOK(); CString str; GetDlgItemText(IDC_INPUT,str); if (str.IsEmpty()) { AfxMessageBox(L"不能發送空文字!");return; } CString szIP; GetDlgItemText(IDC_IP,szIP); m_sock.SendTo(str,str.GetLength(),8811,szIP); } ``` 3.如果要在窗體上輸出接收的字符串 則要定義CSocket派生類 (問題:只接收到一個字符 ) ```c++ void CSockN::OnReceive(int nErrorCode) { // TODO: 在此添加專用代碼和/或調用基類 CString szIP; UINT nPort; wchar_t s[512]; int nLen = ReceiveFrom(s,sizeof(s),szIP,nPort); s[nLen] = 0; /*size_t len = strlen(s) + 1; size_t converted = 0; wchar_t *WStr; WStr=(wchar_t*)malloc(len*sizeof(wchar_t)); mbstowcs_s(&converted, WStr, len, s, _TRUNCATE);*/ CUdpDlg *pDlg = (CUdpDlg*)AfxGetMainWnd();//獲取主對話框的句柄 pDlg->OnReceive(s,szIP); CSocket::OnReceive(nErrorCode); } ``` 4.最后把接收到的值輸出到窗口 (問題:直接收到一個字符執行到 GetWindowTextLengthW()會終止程序) ```c++ void CUdpDlg::OnReceive(LPCWSTR szText, LPCWSTR szIP) { CString str = szIP; str += "\r\n"; str += szText; str += "\r\n"; int nLen = m_his.GetWindowTextLengthW();//獲取當前文字有多長 m_his.SetSel(nLen,-1);//尾部 m_his.ReplaceSel(str);//插入到最后 } ``` **問題解決** 1.Receivefrom只接收到一個字符 ``` //在sendTod之前把數據格式轉化為 LPSTR(char*) void CSocketClientDlg::OnBnClickedOk() { // TODO: 在此添加控件通知處理程序代碼 //CDialogEx::OnOK(); CString str; GetDlgItemText(IDC_INPUT,str); if (str.IsEmpty()){ AfxMessageBox(_T("不能發送空消息!"));return; } CString szIP; CString nPort; GetDlgItemText(IDC_IP,szIP); GetDlgItemText(IDC_PORT,nPort); USES_CONVERSION; LPSTR pBuf = W2A(str); int i = strlen(pBuf); m_sock.SendTo(pBuf,i,8111,szIP); } //在CSock派生類,收里面吧接收的數據用 char*接收 void CSockU::OnReceive(int nErrorCode) { // TODO: 在此添加專用代碼和/或調用基類 char recBuf[1024]={0}; CString szIP; UINT nPort; int len = ReceiveFrom(recBuf,sizeof(recBuf),szIP,nPort); ///接受的數據 recBuf[len] = 0; CSocketClientDlg* pDlg = (CSocketClientDlg*) AfxGetMainWnd(); CString strtest; strtest = recBuf; pDlg->OnReceive(strtest,szIP); CSocket::OnReceive(nErrorCode); } ```` ***** 只要在發送時將str通過 **WideCharToMultiByte** 函數轉化為MBCS編碼方式就行了 Unicode 轉MBCS ```c++ //1.使用WideCharToMultiByte // 假設已經有了一個Unicode 串 wszSomeString... char szANSIString [MAX_PATH]; WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL ); //2.使用W2A宏來實現(可能會出現棧溢出,不要在循環中使用,最好是單獨定義一個函數來實現。) #include <atlconv.h> USES_CONVERSION; pTemp=W2A(wszSomeString); ``` MBCS轉Unicode ```c++ //1.使用MultiByteToWideChar char *szProgID = "MAPI.Folder"; WCHAR szWideProgID[128]; CLSID clsid; long lLen = MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID)); szWideProgID[lLen] = '/0'; //2.通過A2W宏來實現(可能會出現棧溢出,不要在循環中使用,最好是單獨定義一個函數來實現。) #include <atlconv.h> USES_CONVERSION; CLSIDFromProgID( A2W(szProgID),&clsid); //3.通過L這個宏來實現 CLSIDFromProgID( L"MAPI.Folder",&clsid); ``` https://bbs.csdn.net/topics/380215603 *****
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看