当前位置: 源码素材网 » VC++教程 » 详情页

仿聊天功能的VC++ WINSOCK-TCP服务端程序代码

  •   时间:2019-07-07
  • 概述:服务端 聊天程序

仿聊天功能的VC++服务端程序代码: WINSOCK-TCP程序,在此更新所有客户端的请求,告诉服务器该接收消息处理数据了,您可以和客户端结合来学习本代码,客户端代码连接附后:

BOOL CChatSvrDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	//弹出初始话对话框
	CInitDlg dlg;
	if (dlg.DoModal() == IDOK)
	{
		//创建监听套节字
		m_pSocket = new CListeningSocket(this);
		if (m_pSocket->Create(dlg.m_nPort+700))
		{
			if (m_pSocket->Listen())
				return TRUE;
		}
		else
			return FALSE;
	}
	else
		return FALSE;
	return TRUE;
}
//更新所有客户端
void CChatSvrDlg::UpdateClients(char* buffer,int nBufferSize)
{
	for(POSITION pos = m_connectionList.GetHeadPosition(); pos != NULL;)
	{
		//将新信息发送给每个客户端
		CClientSocket* pSocket = (CClientSocket*)m_connectionList.GetNext(pos);
		if (buffer != NULL)
			pSocket->Send(buffer,nBufferSize,0);
	}
}
//处理客户端的连接信息
void CChatSvrDlg::ProcessPendingAccept()
{
	//生成一个新的套节字与客户端通讯
	CClientSocket* pSocket = new CClientSocket(this);
	if (m_pSocket->Accept(*pSocket))
	{
		//将该套节字保存起来
		m_connectionList.AddTail(pSocket);
	}
	else
		delete pSocket;
}
//接收数据
void CChatSvrDlg::ProcessPendingRead(CClientSocket* pSocket)
{
	//定义缓冲区
	char buffer[BUFFER_SIZE];
	//接收数据
	int nReceived = pSocket->Receive(buffer,BUFFER_SIZE,0);
	buffer[nReceived] = 0;
	//将数据在列表框中显示出来
	m_ctrlMsgs.AddString(buffer);
	//将数据发送给每个客户
	UpdateClients(buffer,nReceived);
}
void CChatSvrDlg::OnDestroy()
{
	delete m_pSocket;
	CDialog::OnDestroy();
}

然后通知服务器,有客户端连接了:

//通知服务器,有客户端连接服务器了
void CListeningSocket::OnAccept(int nErrorCode) 
{
	CSocket::OnAccept(nErrorCode);
	//主对话框处理连接信息
	if(m_pDlg)
		m_pDlg->ProcessPendingAccept();
}

通知服务器接收数据:

//通知服务器可以接收数据了
void CClientSocket::OnReceive(int nErrorCode) 
{	
	CSocket::OnReceive(nErrorCode);

	if(m_pDlg)
	{
		//让主对话框处理数据
		m_pDlg->ProcessPendingRead(this);
	}
}

客户端代码请参考这里:VC++ 创建一个消息发送接收(聊天)的客户端程序

    相关声明:

      若“仿聊天功能的VC++ WINSOCK-TCP服务端程序代码”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。