在我的程序中,工作者线程大概是这样的:{
…
for (;;)
{
b = GetQueuedCompletionStatus (g_hCompletionPort,&nBytesToBeRead,&nSocket,&lpo,INFINITE); if (b || lpo)
{
if (b)
{
…
b = ReadFile ((HANDLE)nSocket,&ReadBuffer,nBytesToBeRead,&nBytesRead,&ol);
/*这里用ReadFile根本无法获得来源IP和端口,如果在普通的socket编程下,recvfrom函数里有一个参数,这个参数里就有来源IP和端口,现在换成了ReadFile该如何获得来源IP和端口?IOCP的本意好象就是用WriteFile和ReadFile来完成高效的I/O收发,如果不用ReadFile时候效率会受到影响?如果不用ReadFile程序该如何改写?我在程序里将这里改为
sockaddr_in from;
memset(&from,0,sizeof(from));
int fromlen=sizeof(from);;
char recvbuf[512];
recvfrom(g_hSocket,recvbuf,nBytesToBeRead,0,(sockaddr*)&from,&fromlen);好象根本不对,在for()的无限循环中,怎么始终只能收到一次数据?*/
…
}
…
}
…
…
}请高人指点迷精
…
for (;;)
{
b = GetQueuedCompletionStatus (g_hCompletionPort,&nBytesToBeRead,&nSocket,&lpo,INFINITE); if (b || lpo)
{
if (b)
{
…
b = ReadFile ((HANDLE)nSocket,&ReadBuffer,nBytesToBeRead,&nBytesRead,&ol);
/*这里用ReadFile根本无法获得来源IP和端口,如果在普通的socket编程下,recvfrom函数里有一个参数,这个参数里就有来源IP和端口,现在换成了ReadFile该如何获得来源IP和端口?IOCP的本意好象就是用WriteFile和ReadFile来完成高效的I/O收发,如果不用ReadFile时候效率会受到影响?如果不用ReadFile程序该如何改写?我在程序里将这里改为
sockaddr_in from;
memset(&from,0,sizeof(from));
int fromlen=sizeof(from);;
char recvbuf[512];
recvfrom(g_hSocket,recvbuf,nBytesToBeRead,0,(sockaddr*)&from,&fromlen);好象根本不对,在for()的无限循环中,怎么始终只能收到一次数据?*/
…
}
…
}
…
…
}请高人指点迷精
解决方案 »
- MFC里面,聊天软件的用户列表的实现的讨论
- 基于MFC的OpenGL绘图的问题
- 在驱动中怎样通过设备对象来遍历这个设备的符号链接?
- Winsock数据传输!!!求助!!!
- GDI+ HatchBrush /TextureBrush 打印问题
- socket中的send和recv怎么用?
- 如何使list control 显示的东西使暗码?
- 刚学win32编程,请教RegisterClass()的作用
- 不知道Xtreme Toolkit 2.0有无类似BCGCBPro6.74中的CBCGPTasksPane?
- GlobalApi.h
- 谁能给我搞一个操作注册表的类?
- 提醒大家注意:send 和 recv 中的标志
在for的循环体之前先WSARecvFrom,这叫做初始话一下,不如你程序将堵在GetQueuedCompletionStatus 这里
socket需要不需要改成WSASocket()???是不是所有的这套函数都要改成增强版也就是WSA开头的版本的函数?