再请高手看看服务器端

207 2003-04-18 08:03:57
UINT CChat::thread(LPVOID p) //(原来是UINT thread(LPVOID p)
{
//定义缓冲区
char buff[100];
CSize size;
size.cx=0;
size.cy=30;
int s=1,msgcount,loop=1,flag=0;
//获得当前运行窗口的句柄

//CChat *chatview=(CChat*)AfxGetApp()->GetMainWnd();

CChat *chatview=(CChat*) p;
//获得还没有被占用的数组序号
msgcount=chatview->getcount();
//如果不等于-1,则表示还有空缺Socket
if(msgcount==-1)
loop=0;
if(loop)
{
s=1;
//使用空缺的Socket等待客户连接
chatview->msgsock[msgcount]=accept(chatview->sock,(sockaddr *)&(chatview->serv),&(chatview->addlen));
if(chatview->msgsock[msgcount]==INVALID_SOCKET)
{
//如果返回错误,则提示错误
chatview->m_ser_talk.SetWindowText("Error Accept");
}
else
{
//如果客户端成功,则再次启动另一个线程,启动线程

/**原来是线程转换成类函数这怎写?*/ AfxBeginThread(thread,0);
//显示联机成功信息
chatview->SetForegroundWindow ();
chatview->m_ser_list.InsertItem (chatview->count++,"连接成功");
chatview->m_ser_list.InsertItem (chatview->count++,inet_ntoa(chatview->serv.sin_addr));
chatview->m_ser_list.Scroll (size);
chatview->m_send.EnableWindow (true);
//如果没发生错误,则一直循环等待数据的到来
while(s!=SOCKET_ERROR)
{
//循环接收数据
s=recv(chatview->msgsoc[msgcount],buff,100,0);
chatview->SetForegroundWindow();
//如果接收成功,则显示接收到的数据
if(s!=SOCKET_ERROR)
{
chatview->m_ser_list.InsertItem(chatview->count++,buff);
chatview->m_ser_list.Scroll(size);
//发送信息到所有的客户端
chatview->sendtoall(chatview->msgsock[msgcount],buff);
}
}
//如果发生错误,发送连接中断消息到客户端
send(chatview->msgsock[msgcount],"Disconnected",100,0);
//显示相关信息
chatview->m_ser_list.InsertItem(chatview->count++,"Disconnected");
chatview->m_ser_list.Scroll(size);
//将该Socket设定为NULL
chatview->msgsock[msgcount]=NULL;
//然后判断是否还有其他客户在保持连接
for(int i=0;i<5;i++)
if(chatview->msgsock[i]!=NULL)
flag=1;
//如果没有客户连接了,则将发送按钮设定为不可用
if(flag!=1)
chatview->m_send.EnableWindow(false);
//关闭连接
closesocket(chatview->msgsock[msgcount]);
//flag=0;
}
}
//终止线程
//AfxEndThread(thread,0);
return 0;
}
...全文
34 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
hahu 2003-04-18
  • 打赏
  • 举报
回复
没有看出你有什么问题
如果这是一个线程函数
UINT CChat::thread(LPVOID p) //(原来是UINT thread(LPVOID p)
原来的是正确的
不应该加类名CChat

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧