1. 程式人生 > >使用CSocket、CSocketFile及CArchive組合接收不到資料的一種原因

使用CSocket、CSocketFile及CArchive組合接收不到資料的一種原因

這幾天在做網路程式設計,發現一個問題

客戶端使用CSocket、CSocketFile及CArchive組合,

關鍵程式碼如下:

void CClientSock::init(CClientDlg* pdlgClient)
{
m_pdlgClient=pdlgClient;
m_psockFile=new CSocketFile(this,TRUE);
m_parInput=new CArchive(m_psockFile,CArchive::load);//外部傳輸到本機的資料,可從套接字中讀出資料,
m_parOutput=new CArchive(m_psockFile,CArchive::store);//傳輸至套接字資料,從套接字中寫入資料,
//m_bIsInit=TRUE;//初始化成功


}
void CClientSock::OnReceive(int nErrorCode) 
{
// TODO: Add your specialized code here and/or call the base class

CSocket::OnReceive(nErrorCode);

CString msg;

CString recvStr;
do 
{

(*m_parInput)>>msg;
recvStr+=msg;
} while (m_parInput->IsBufferEmpty());
//AfxMessageBox(recvStr,MB_OK);
}

程式碼中(*m_parInput)>>msg這句在伺服器端傳送資料時,一直卡著,無法執行下去,但是用CSocket中的成員函式recvive是可正常接收資料的。

經過各種折騰,最終發現:

1、客戶端與伺服器端都用CSocket、CSocketFile及CArchive組合時傳送接收資料時,通訊可以正常收發資料

2、伺服器直接呼叫成員函式send()傳送資料,而客戶端用CSocket、CSocketFile及CArchive組合接收資料時,就會在receive處卡主,執行不下去。

希望對玩CSocket的同志有用。