关于用C++实现Web服务器的问题

luominghao 发布于 2013/04/17 10:56
阅读 519
收藏 2
我用C++实现Web服务器的时候遇到了一个问题,就是在浏览器与服务器之间建立TCP连接后,浏览器发送过来的http请求头接收不到,如果浏览器再次请求时,就可以收到。


求解决,如何接收TCP建立之后直接接收到http请求头

部分代码:

void CWebServerDlg::OnBnClickedBtnSetup()//建立服务器监听
{
	// TODO: 在此添加控件通知处理程序代码
	m_AcceptSocket=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
	if(INVALID_SOCKET==m_AcceptSocket)
	{
		MessageBox(_T("创建监听套接字失败!"));
		return;
	}

	SOCKADDR_IN AcceptAddr;
	AcceptAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
	AcceptAddr.sin_family=AF_INET;
	AcceptAddr.sin_port=htons(80);


	if(SOCKET_ERROR==bind(m_AcceptSocket,(sockaddr*)&AcceptAddr,sizeof(SOCKADDR_IN)))
	{
		MessageBox(_T("绑定套接字失败!"));
		closesocket(m_AcceptSocket);
		return;
	}

	if(SOCKET_ERROR==listen(m_AcceptSocket,3))
	{
		MessageBox(_T("监听套接字失败!"));
		closesocket(m_AcceptSocket);
		return;
	}

	if(SOCKET_ERROR==WSAAsyncSelect(m_AcceptSocket,m_hWnd,WM_CONNECT,FD_ACCEPT))
	{
		MessageBox(_T("注册网络事件失败!"));
		closesocket(m_AcceptSocket);
		return;
	} 
}
LRESULT CWebServerDlg::OnAccept(WPARAM wParam, LPARAM lParam)//与客户端建立连接
{
	switch(LOWORD(lParam))
	{
	case FD_ACCEPT:
		{
			int len=sizeof(SOCKADDR_IN);
			m_ClientSocket=WSAAccept(m_AcceptSocket,(sockaddr*)&m_ClientAddr,&len,NULL,0);
			if(INVALID_SOCKET==m_ClientSocket)
			{
				MessageBox(_T("创建与客户端连接套接字失败!"));
				closesocket(m_ClientSocket);
				return false;
			}
			if(SOCKET_ERROR==WSAAsyncSelect(m_ClientSocket,m_hWnd,WM_MSG,FD_READ))
			{
				MessageBox(_T("注册客户端连接网络事件失败!"));
				closesocket(m_ClientSocket);
				return false;
			}
		}
	}
	return true;
}
LRESULT CWebServerDlg::OnHandle(WPARAM wParam, LPARAM lParam)//接收http请求
{
	switch(LOWORD(lParam))
	{
	case FD_READ:
		{
			
			char RecvBuf[2048];
			ZeroMemory(RecvBuf,2048);

			DWORD dwFlags=0;
			int RecvState=recv(m_ClientSocket,RecvBuf,2048,dwFlags);
			CString str;
			str.Format("%s",RecvBuf);
			if(str!="")
				MessageBox(str);
		}
	}
	return true;
}
加载中
返回顶部
顶部