сервер не получает сообщение

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[flash] ОТКЛЮЧЕН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: сервер не получает сообщение

Kolinus » 29 ноя 2005, 16:06

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

сервер не получает сообщение

AlexDav » 29 ноя 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);
	}
}

Вернуться к началу