亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您好,請問在socket中的recv和send都有錯,該怎么解決?

您好,請問在socket中的recv和send都有錯,該怎么解決?

江戶川亂折騰 2021-11-03 11:07:20
客戶端中,recv(m_sockClient,strRecv,100,0); 執行不下去(一直卡在這句,感覺這句根本沒執行)。自己將socket的函數封裝成一個類。第一次接觸,徹底蒙了。下邊是自己寫的類。看看哪里有問題://加載套接字庫void CClientSocket::AddWSA() {m_wVersionRequested = MAKEWORD( 1, 1 );m_err = WSAStartup( m_wVersionRequested, &m_wsaData );if ( m_err != 0 ) {return;}if ( LOBYTE( m_wsaData.wVersion ) != 1 ||HIBYTE( m_wsaData.wVersion ) != 1 ) {WSACleanup( );return; }}//創建用于監聽的套接字并連接void CClientSocket::Create() {m_sockClient = socket(AF_INET,SOCK_STREAM,0);//連接m_addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");m_addrSrv.sin_family = AF_INET;m_addrSrv.sin_port = htons(6000);connect(m_sockClient, (SOCKADDR*)&m_addrSrv, sizeof(SOCKADDR));HANDLE hThread = CreateThread(NULL,0,ThreadProc,this,0,NULL); //創建線程CloseHandle(hThread); //關閉內核對象線}DWORD WINAPI CClientSocket::ThreadProc(LPVOID lpParameter){CClientSocket *pClientSock= (CClientSocket *)lpParameter;Sleep(1);pClientSock->Recv();return 0;}//接受消息CString CClientSocket::Recv() {//等待服務器的消息到來CString str;char strRecv[100] = "\0";m_length = sizeof(SOCKADDR);Sleep(1);recv(m_sockClient,strRecv,100,0);  str.Format("%s",strRecv);return str;}//發送消息void CClientSocket::Send(CString str) {char strSend[100] = "\0";str.GetBuffer(str.GetLength());strcpy(strSend,str);send(m_sockClient,strSend,strlen(strSend)+1,0);}//關閉套接字void CClientSocket::close(){closesocket(m_sockClient);WSACleanup();}
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

提供一下你的完整客戶端和服務端的代碼。但看這個代碼沒什么問題。
但是根據你的描述,到recv的時候執行不下去,可能是因為沒有接受到服務端所發送的消息導致的。
因為recv函數是一個阻塞函數,當這個函數沒有收到消息時會一直等待,當收到消息之后才能繼續向下執行。

查看完整回答
反對 回復 2021-11-07
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

是這樣的,你的通信是同步的,所以recv一直處于接收狀態,只有接收到數據才會執行下一步。
改進:
可以循環等待接收,在循環里可以處理recv:
1、使用setsockopt設置超時時間。
2、添加select等異步處理(里面也可以設置時間)。
PS:個人建議:你若急著完成任務可以采用1,若你是學習狀態,可以學習一下select等異步通信

查看完整回答
反對 回復 2021-11-07
  • 2 回答
  • 0 關注
  • 620 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號