看看我这个多线程的SOCKET接受方法是不是可行的? 我先定义一个g_socket绑定他, linsten里面的参数是10然后用WASASYNSELECT和一个WINDOWS消息关联起来在那个消息响应函数里面 当受到消息时 用AfxBeginThread开始一个函数在这个函数里面 accept对方的请求,accept地返回置放在一个大小为10的socket数组里面请问是否这样做我的10个socket就能互不干扰的同时工作了?多谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不能你的端口只有一个,但是同时只能由一个socket操作你的这个端口。如果其中一个socket占用端口,其他的socket就会抛出错误 可以.一个连接的唯一性由4个值决定:本地IP,本地端口,对方IP,对方端口.accept产生的SOCKET连接虽然都是同一个本地IP,本地端口,对方IP,但是对方端口肯定不相同,所以各个连接可以区分,彼此之间不会有影响. linsten里面的参数是10 这里面的10是同时接受的连接数。不是说只接到10个连接就不能再LISTEN就算不新开线程,accept的各个连接,也是可以不相互干扰的工作。 (多线程的SOCKET接受方法是不是可行的) http://blog.csdn.net/ximenying/archive/2006/08/08/1037519.aspx UINT ServerThreadProc(LPVOID pParam){ CSockAddr saClient; CHttpBlockingSocket sConnect; char *request1=new char[1024]; int nBytesSent = 0; CFile* pFile = NULL; if(!theApp.m_sListen.Accept(sConnect, saClient)) { theApp.m_bListening=FALSE; delete request1; theApp.m_pView->Invalidate(); return 0; } else { AfxBeginThread(ServerThreadProc,pParam,THREAD_PRIORITY_NORMAL); theApp.m_nConnectCount++; theApp.m_pView->Invalidate(); }......//下面是你具体的业务模块,以上代码完成了动态连接很多个客户端 这种结构非常好。但是你的思路里面有一个概念错误listen参数里面的10表示可以同时接受10个tcp请求,这个意思是说当程序来不及处理的时候,可以有10个客户端的请求背保存在队列里面等待处理。而同时处理的socket连接可以达到很多。所以你设置一个大小为10的socket数组没有意义,既然在线程里面accept那么直接在线程里用局部变量就行了。 大家看看我的双缓冲解决屏幕闪动为什么没有效果,十万紧急!!! 菜鸟提问:vc++ 和Mfc是什么关系呀?? 请问一个奇怪的问题,是关于钩子和dll的! 有关焦点,请教各位大侠!!!!!!!!急促! 为什么我看不到我的文件! 菜鸟问关于OpenGL的问题 紧急求助:一个VC和数据库有关的问题!! pb调用用vc6.0写dll,如果涵数中有参数,就会出错,这是什么原因? 请教一问题,关于用com打开指定程序的. OpenFromInitializationString 参数 在线等,安装及程序问题 怎么修改CFileDialog对话框的窗口标题?
一个连接的唯一性由4个值决定:本地IP,本地端口,对方IP,对方端口.
accept产生的SOCKET连接虽然都是同一个本地IP,本地端口,对方IP,但是对方端口肯定不相同,所以各个连接可以区分,彼此之间不会有影响.
就算不新开线程,accept的各个连接,也是可以不相互干扰的工作。
{
CSockAddr saClient;
CHttpBlockingSocket sConnect;
char *request1=new char[1024];
int nBytesSent = 0;
CFile* pFile = NULL;
if(!theApp.m_sListen.Accept(sConnect, saClient))
{
theApp.m_bListening=FALSE;
delete request1;
theApp.m_pView->Invalidate();
return 0;
}
else
{
AfxBeginThread(ServerThreadProc,pParam,THREAD_PRIORITY_NORMAL);
theApp.m_nConnectCount++;
theApp.m_pView->Invalidate();
}......//下面是你具体的业务模块,以上代码完成了动态连接很多个客户端
但是你的思路里面有一个概念错误
listen参数里面的10表示可以同时接受10个tcp请求,这个意思是说当程序来不及处理的时候,可以有10个客户端的请求背保存在队列里面等待处理。而同时处理的socket连接可以达到很多。
所以你设置一个大小为10的socket数组没有意义,既然在线程里面accept那么直接在线程里用局部变量就行了。