PDA

Просмотр полной версии : сервер не получает сообщение



AlexDav
29.11.2005, 10:04
Делал пример по книге:
Создал класс:



class CSocketStorage : public CAsyncSocket
{
public:
CSocketStorage();
virtual ~CSocketStorage();

CDialog* m_pWnd;
void SetParent(CDialog* pWnd){m_pWnd = pWnd;}
void OnAccept(int nErrorCode);
void OnConnect(int nErrorCode);
void OnClose(int nErrorCode);
void OnReceive(int nErrorCode);
void OnSend(int nErrorCode);
}


приложение может быть и клиентом и сервером, так соединяюсь:



CSocketStorage m_sListenSocket;
CSocketStorage m_sConnectSocket;

void CClServerDlg::OnBnClickedBconnect()
{
UpdateData(TRUE);

if(m_iClient == 0)
{
m_sConnectSocket.Create();
m_sConnectSocket.Connect(m_strName, m_iPort); //m_iPort=4000, m_strName = "loopback"
}
else
{
m_sListenSocket.Create(m_iPort);
m_sListenSocket.Listen();
}
}


Вот этот код отрабатывает без ошибок:



void CClServerDlg::OnBnClickedBsend()
{
int iLen;
int iSent;

UpdateData(TRUE);

if(m_strMessage != "")
{
iLen = m_strMessage.GetLength();
iSent = m_sConnectSocket.Send(m_strMessage, iLen);
if(iSent == SOCKET_ERROR)
{
}
else
{
m_ctlSent.AddString(m_strMessage);
UpdateData(FALSE);
}
}
}


А этот не работает, туда даже не заходит - впринципе, я догадываюсь почему, но почему??? :)
void CClServerDlg::OnReceive(void)



{
MessageBox(_T("OnReceive"));
char* chBuf = new char[1025];
int iBufSize = 1024;
int iRcvd;
CString strRecvd;

iRcvd = m_sListenSocket.Receive(chBuf, iBufSize);
if(iRcvd == SOCKET_ERROR)
{
MessageBox(_T("Error"));
}
else
{
chBuf[iRcvd] = NULL;
strRecvd = chBuf;
m_ctlRecvd.AddString(strRecvd);
UpdateData(FALSE);
}
}

Kolinus
29.11.2005, 16:06
посмотри внимательно описалово сенд и проверь режим сокета - он может быть буферизованным то есть не отошлет сообщение пока полный пакет не наберется