//************************************************************************
// Boby Thomas Pazheparampil
// May 2006
// Implementation of CIPMessage class and main.
//************************************************************************
#include "chat_server.h"
CChatServer CServerObj;
UINT ServerRecThread(LPVOID pParam)
{
SOCKET sRecSocket = (SOCKET)pParam;
while(1)
{
if(CServerObj.RecClient(sRecSocket))
break;
}
return 0;
}
UINT ServerListenThread(LPVOID pParam)
{
while(1)
CServerObj.StartListenClient();
return 0;
}
CChatServer::CChatServer()
{
cout << "Starting up TCP Chat server\n";
m_bIsConnected = false;
WSADATA wsaData;
sockaddr_in local;
int wsaret=WSAStartup(0x101,&wsaData);
if(wsaret!=0)
{
return;
}
local.sin_family=AF_INET;
local.sin_addr.s_addr=INADDR_ANY;
local.sin_port=htons((u_short)8084);
m_SListenClient=socket(AF_INET,SOCK_STREAM,0);
if(m_SListenClient==INVALID_SOCKET)
{
return;
}
if(bind(m_SListenClient,(sockaddr*)&local,sizeof(local))!=0)
{
return;
}
if(listen(m_SListenClient,10)!=0)
{
return;
}
m_bIsConnected = true;
return;
}
CChatServer::~CChatServer()
{
closesocket(m_SListenClient);
WSACleanup();
}
void CChatServer::StartListenClient()
{
sockaddr_in from;
int fromlen=sizeof(from);
m_SClient=accept(m_SListenClient,
(struct sockaddr*)&from,&fromlen);
if(m_SClient != INVALID_SOCKET)
m_vClientList.push_back(m_SClient);
AfxBeginThread(ServerRecThread,(void *)m_SClient);
}
int CChatServer::SendMessagePort(string sMessage)
{
int iStat = 0;
list<SOCKET>::iterator itl;
if(m_vClientList.size() == 0)
return 0;
for(itl = m_vClientList.begin();itl != m_vClientList.end();itl++)
{
iStat = send(*itl,sMessage.c_str(),sMessage.size()+1,0);
if(iStat == -1)
m_vClientList.remove(*itl);
}
if(iStat == -1)
return 1;
return 0;
}
int CChatServer::RecClient(SOCKET sRecSocket)
{
char temp[4096];
int iStat;
//cout <<inet_ntoa(from.sin_addr) <<":"<<temp<<"\r\n";
iStat = recv(sRecSocket,temp,4096,0);
if(iStat == -1)
{
m_vClientList.remove(sRecSocket);
return 1;
}
else
{
cout <<":"<<temp<<"\n";
SendMessagePort(temp);
return 0;
}
return 0;
}
int main(int argc, char* argv[])
{
int nRetCode = 0;
char buf[4096];
cout << "This is written by Boby Thomas.\r\n";
cout << "This aplication act as a chat server.\n";
cout << "Messages from any pc will be broadcasted to all connected pcs.\n";
cout << "Connect to the server pc port 8084(Digital BOBY).\n";
cout << "Press ONLY ENTER to quit.\n";
cout << "=================================================\n";
if(!CServerObj.IsConnected())
{
cout<<"\nFailed to initialise server socket";
cout<<"\nThis is boby signing off : Bye";
getch();
return 1;
}
AfxBeginThread(ServerListenThread,0);
while(gets(buf))
{
if(strlen(buf) == 0)
break;
if(CServerObj.SendMessagePort(buf))
{
cout<<"Problem in connecting to server. Check whether server is running\n";
break;
}
}
cout<<"This is Boby signing off.";
getch();
return nRetCode;
}
C_C++实现Socket聊天程序
5星 · 超过95%的资源 需积分: 15 103 浏览量
2010-03-06
16:56:38
上传
评论 4
收藏 95KB RAR 举报
uuuuuuuua
- 粉丝: 1
- 资源: 25
最新资源
- Fortran语言语法快速入门.pdf
- 明日方舟 年 鼠标指针.rar
- 全国银行经济监管可视化系统
- e商小二-供应链管理物流交仓创业商业计划书.rar
- Edge浏览器下载文件提示 “无法安全下载” 的解决方法
- 基于springboot+layui的医院日常耗材管理系统.zip
- Emkex亿迈克思新型互联网磁材供应链商业计划书.rar
- 计算机毕业设计-ASP.NET某店POS积分管理系统-销售情况,会员卡再发行数据生成(源代码+)-毕设源码实例.zip
- 计算机毕业设计-asp.net某店POS积分管理系统-清除履历表、日志表、月购买额(源代码+)-毕设源码实例.zip
- 计算机毕业设计-ASP.NET某店POS积分管理系统-积分实绩更新及销售状况统计(源代码+)-毕设源码实例.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
- 6
前往页