标题:[求助]一个网络问题..........
只看楼主
学习VB才2天
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1653
专家分:0
注 册:2006-5-4
 问题点数:0 回复次数:5 
[求助]一个网络问题..........

如何使用WINDOWS API中的WSAAsyncSelect.....


是在LISTEN函数前调用,还是在ACCEPT前调用啊....


能给出个确切方法吗?

搜索更多相关主题的帖子: 网络 
2006-09-07 11:07
学习VB才2天
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1653
专家分:0
注 册:2006-5-4
得分:0 
顶一下....

[GLOW=255,DeepPink,3]我的免费网盘[/GLOW]
2006-09-07 16:49
学习VB才2天
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1653
专家分:0
注 册:2006-5-4
得分:0 

Public Const SOL_SOCKET = &HFFFF
Public Const SO_LINGER = &H80
Public Const FD_READ = &H1
Public Const FD_WRITE = &H2
Public Const FD_OOB = &H4
Public Const FD_ACCEPT = &H8
Public Const FD_CONNECT = &H10
Public Const FD_CLOSE = &H20
......

SelectOps = FD_READ Or FD_WRITE Or FD_CLOSE Or FD_ACCEPT
WSAAsyncSelect(sock, Me.hWnd, network_event, ByVal SelectOps)


下面是C++的解释 我尝试过 在C++ 中可行,但是照搬VB却产生了错误 INET能连接上 局域网却无法连接.连接上了发送消息却无法接受... 我不知道是不是自己翻译错了 请大家帮忙翻译一下 在这里先谢谢大家了...

void OnNetEvent(WPARAM wParam, LPARAM lParam)
{
file://调用API函数,得到网络事件类型
int iEvent = WSAGETSELECTEVENT(lParam);

file://得到发出此事件的客户端套接字
SOCKET pSock = (SOCKET)wParam;

switch(iEvent)
{
case FD_ACCEPT: file://客户端连接请求
{
OnAccept();

break;
}
case FD_CLOSE: file://客户端断开事件:
{
OnClose(pSock);
break;
}
case FD_READ: file://网络数据包到达事件
{
OnReceive(pSock);
break;
}
case FD_WRITE: file://发送网络数据事件
{
OnSend(pSock);
break;
}
default: break;
}
}

void OnAccept(SOCET pSock) file://响应客户端连接请求函数
{
int len = sizeof(sockaddr);

file://调用API函数,接受连接,并返回一个新套接字
file://还可以获得客户端的IP地址
SOCKET clientSocket = accept(serverSocket,
(struct sockaddr*)&clientaddr, &len);

file://为新的socket注册异步事件,注意没有Accept事件
if(WSAAsyncSelect(clientSocket ,m_hWnd, IP_EVENT,
FD_CLOSE | FD_READ | FD_WRITE) == SOCKET_ERROR)
{
MessageBox("注册异步事件失败!");
return;
}

file://自编函数,将此客户端的相关信息保存下来:套接字、
// IP地址、登陆时间
saveClientSocket(clientSocket,clientAddr,currentTimer);
}

void OnClose(SOCET pSock)
{
file://自编函数,结束与相应的客户端的通信,释放相应资源并做相应处理
endClientSocket(pSock);
}

void OnSend(SOCET pSock)
{
file://自编函数,在给客户端发数据时做一些预处理
handleOnSend(pSock);
}

void OnReceive(SOCET pSock)
{
recv(...); file://调用API函数,读出网络缓冲区中的数据包

file://自编函数,将此数据包和发出此数据的客户端
buildNetMsg(...);

file://自编函数,将此网络消息放入一个消息队列中,由工作线程去处理
saveNetMsg(...);
SetEvent(...); file://用事件对象触发工作线程
}


[此贴子已经被作者于2006-9-8 10:31:52编辑过]


[GLOW=255,DeepPink,3]我的免费网盘[/GLOW]
2006-09-08 10:30
wzla333
Rank: 4
来 自:火星
等 级:业余侠客
威 望:2
帖 子:185
专家分:237
注 册:2006-8-24
得分:0 
有同时学习VC++和VB的吗?
帮个忙行不?

我从来都非常缺少朋友,因为自己不善于表达,无论是工作,学习,生活,抑或是网络...ACG爱好者,标准一个无限接近30岁的大叔......
2006-09-09 13:24
zmetero11
Rank: 1
等 级:新手上路
帖 子:123
专家分:0
注 册:2006-2-5
得分:0 
VC++里的很多东西直接翻译到VB里就会出问题

黑色的羽翼笼罩与夜月中,守护...不变<-\^/
2006-09-09 13:29
学习VB才2天
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1653
专家分:0
注 册:2006-5-4
得分:0 
那没有别的办法了吗?

[GLOW=255,DeepPink,3]我的免费网盘[/GLOW]
2006-09-10 10:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-88571-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.379198 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved