c++简单服务器接收数据,下面是我代码,现在我的情况是 30

下面是我代码,现在我的情况是,每连接一个客户端就开一个线程,然后线程里面接收数据,但是接收数据会使线程假死,不能干其他东西,所以现在我想开一条线程接受全部的客户端发来的数... 下面是我代码,现在我的情况是,每连接一个客户端就开一个线程,然后线程里面接收数据,但是接收数据会使线程假死,不能干其他东西,所以现在我想开一条线程接受全部的客户端发来的数据,如果这样不好,还有什么好的想法给我参考一下,如果有大大不介意可以微微改一下代码给我参考一下

#include "stdafx.h"
#include <iostream>
#include "ODSocket.h"
#include "pthread.h"
#include <string>
using namespace std;

pthread_t pidrun;

ODSocket m_pServerSocket;
static void* th_run(void *r)
{
ODSocket* ss = (ODSocket*)r;
cout<<"启动sb线程"<<endl;
while(1)
{
int aa = 512;
char* buff = new char[aa];
int num = ss->Recv(buff,aa);//收到数据
if( num <= 0 )
{
delete[] buff;
break;
}
//打印数据
for(int i=0;i<num;i++)
{
cout<<buff[i];
}
cout<<"\n"<<"-----我是万恶的分割线,关键我还是垃圾服务器--------"<<endl;
delete [] buff;
}

return NULL;
}

int main(int argc, _TCHAR* argv[])
{

if ( m_pServerSocket.Init() ) {
printf("init server failed\n");
}
if ( !m_pServerSocket.Create(AF_INET, SOCK_STREAM) ) {
printf("create server failed\n");
}
if ( !m_pServerSocket.Bind(4444) ) {
printf("bind server failed\n");
}
if ( !m_pServerSocket.Listen() ) {
printf("listen server failed\n");
}
cout<<"垃圾服务器开启成功"<<endl;
while ( 1 ) {
ODSocket* clientSocket = new ODSocket();
if ( ! m_pServerSocket.Accept(*clientSocket) )
{
clientSocket->Close();
cout<<"lose"<<endl;
continue;
}
else
{
cout<<"成功进来了一个小偷客户端"<<endl;
//pthread_mutex_init(&mutex,NULL);
pthread_create(&pidrun,NULL,th_run,clientSocket);//启动线程
}
}
return 0;
}
展开
 我来答
空雪梦见
2014-09-14 · TA获得超过5598个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1208万
展开全部
一个线程处理所有客户端的receive操作是很常用的方法。
FreeBSD下的KQueue,Linux下的epoll,Windows下的完成例程模型,以及三个系统下都能用的select、前两个系统下可以用的poll,都是一个线程处理多个套接字。
三个系统下socket可以设置为非阻塞方式,此时如果调用recv需要等待数据来,那么就会直接返回错误而不是在那边等;只有数据已经来了,调用recv才会成功。如果程序没事做,正确的方法也不是死循环去轮训这些套接字,而是将这些套接字填入一个“集合”(FDSET),然后用select函数在这个集合上面等待,这个集合中有套接字能收数据了,等待就结束。
这里select的等待就类似你那里面的recv的等待。只不过recv在一个套接字上等待的时候线程就会停止运行,而select可以在一堆套接字上同时等待。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式