TCP/IP服务端多线程,给客户端发心跳包。

xujianxiang 2012-11-06 01:47:40
 while(1)

{

ThreadData* td=new ThreadData;

int iClentAddrLen=sizeof(td->Addr);

td->Socket=accept(ServerSocket, (SOCKADDR*)&td->Addr,&iClentAddrLen);

cout<<"连接成功,客户端IP地址为:"<<endl;


_beginthread(ClientThread, 0, td);

}




VOID ClientThread(PVOID pvoid)

{

ThreadData*td=(ThreadData*)pvoid;

char buffer[BUFFER_LEN];

while(recv(td->Socket, buffer, BUFFER_LEN, 0))
{
EnterCriticalSection(&m_csCount);

cout<<buffer<<endl;

LeaveCriticalSection(&m_csCount);
}


cout<<"已断开连接"<<endl;
closesocket(td->Socket);
delete td;
_endthread();

}

我想给多个客户端发心跳包,怎么实现????
...全文
307 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xujianxiang 2012-11-06
  • 打赏
  • 举报
回复
我是给客户端发送。
翅膀又硬了 2012-11-06
  • 打赏
  • 举报
回复
排版没弄好,你凑合看吧。不清楚为什么你说给客户端发送,这里却用的recv
翅膀又硬了 2012-11-06
  • 打赏
  • 举报
回复
引用 4 楼 xujianxiang 的回复:
但是队列我不知道怎么建。
队列你可以自己实现,给你举个最简单的例子,用数组(当然正常情况比较少用数组,用数据结构队列应该更合适)。
ThreadData *ptd[20];//20个数据的指针数组,这里假设你已经把要处理的数据放里面了。

VOID ClientThread(PVOID pvoid)
{
       for (int i=0;i<20;++i)
     {
  ThreadData*td=ptd[i];
 
         char buffer[BUFFER_LEN];
 
         while(recv(td->Socket, buffer, BUFFER_LEN, 0))
         {
 EnterCriticalSection(&m_csCount);
 
                   cout<<buffer<<endl;
                  
 LeaveCriticalSection(&m_csCount);
         }
  
 
      cout<<"已断开连接"<<endl;
         closesocket(td->Socket);
         delete td;
       }
         _endthread();
 
}
xujianxiang 2012-11-06
  • 打赏
  • 举报
回复
但是队列我不知道怎么建。
xujianxiang 2012-11-06
  • 打赏
  • 举报
回复
ThreadData* td,是不是应该放在队列里??
这不是鸭头 2012-11-06
  • 打赏
  • 举报
回复
挨个发送。。。
xujianxiang 2012-11-06
  • 打赏
  • 举报
回复
我想能够服务器端发。因为它还包含一些数据信息

18,356

社区成员

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

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