谁懂的,有相关的源代码吗?有的行行好。发我份。
要改善下我的程序,以应对在很多客户端的情况下,去接受保留套接字。
好人
要改善下我的程序,以应对在很多客户端的情况下,去接受保留套接字。
好人
解决方案 »
- 请问如何使所有程序响应我设置的热键。
- 在Web页面上放入winform程序,我想在winform里得到Web页面(即得到webBrower),我要做Web打印的时候要碰得到,不知道怎么搞,有知道说下,谢谢
- 有现成能用的c的求反余弦的函数吗?!!
- 怎么样修改EXE文件的资源?
- 清空SOCKET的物理缓冲用什么函数?我现在先CLOSE,再CREATE,这么做的,功能是达到了,但是土了点,有什么直接的函数吗?
- 一个简单的关于目录的问题,急着送分。
- Access数据库的转储,急!
- CWebBrowser2如何得到网页源文件?
- 之前都好好地,今天突然编译的dll 在别的电脑上Loadlibrary报14001
- 再次请教关于进程通信问题
- 配合完成端口服务器程序用的sokcet客户端程序
- IOCP非常疑惑的问题:GetQueuedCompletionStatus到底是如何知道是发送还是接收的?
带宽:在同一时间你传输数据量准定会有一个限制,就像你用的宽带,假设是2M的话那你同一时间传输的数据量不会超过2M说实话我也刚入门VC不久问你几个问题啊
1.你说的客户端需要先连接到服务器端吗?还是不需要连接你有一个类似于列表的东西可以直接选的(比方说直接从数据库中提取)如果是不需要的话你整体的系统就变成了客户端(你所说的服务器端)->服务器端(原来的客户端)的架构了,这样的话我觉得直接用多线程就可以完成你要做的吧(可能线程数要相对多一些),传送的数据是固定的,客户端的地址信息什么的可以直接从队列里取().
如果是需要的话,我猜想你的设计是:服务器端一旦接收到客户端请求就给客户端发送一个文件
接收到请求后:你当然会用多线程来做,但是你在起线程前先判断一下是否有空闲的连接可以用,有的话就可以直接用这个连接来发送文件了,但是这么设计会有一个问题就是:发送数据时文件映射的次数, 也就是我在问题2里说的,所以我觉得你的设计应该是在确认连接到服务器端的客户端信息之后.再映射文件,最后依次发送给客户端.
2.你是做文件传输,那你在传输数据的时候是每个线程里来完成文件映射再传送呢?还是先映射完了再发到每个线程里传输?
3.是在一台电脑上做的测试吗?
如果是一台的话我觉得还是可以接收"客户端一多服务器就CPU高"的问题
发送端在这时候一定是新起一个线程吧,监听和接收发送不应该用同一个线程吧
然后<!--发送端接受到消息后,创建发送线程-->
这里你有必要再创建发送线程么?之前给接收端发送文件列表(文件的大小和一些属性)这个线程不可以继续用吗?因为你自己封装的消息已经包含了很多信息的啊一起等高手解答?
for (i = 0;i<MAX_SOCKET_ACCEPT;i++)
{
SubmmitNewAccep();
}
void CVideoSockServer::SubmmitNewAccep()
{
CVideoSockeSend * pSend = new CVideoSockeSend[1];
if(!pSend->InitClass())
{
GF_WriteLog("创建套接字失败,无法提交新的接收请求");
return;
}
st_OverLapped * pOver = G_Memery.GetData();
pOver->CMD = CMD_Accept;
pOver->lpSockSend = pSend;
AcceptEx(m_VideoSocketListen,pSend->GetSocket(),pOver->buff,0,sizeof(sockaddr_in)+16,sizeof(sockaddr_in)+16,NULL,(LPOVERLAPPED)&pOver->OverLapped);
每一个客户接入后,再次投递。实际上由IOCP维护连接池}
后增加delete [] pSend;