本人正在编写一个FTP服务器的更新程序,需要实现的功能是更新本地的文件
大概原理是这样的,先从服务器上下载配置文件,比较版本号,然后再下载更新文件
现在有个问题是这样的:
根据FTP的协议,通常需要编写两个Socket,一个Session,一个Data,我采用的是WSAAysncSelect模型,因此需要在主窗口建立消息循环来接消息,由于是要接两个套接字的消息,所有我定义了两个消息循环,本来应该在Session发“RETR”命令之前,调用WSAAysncSelect来启动Data消息循环,但是我的Data消息循环总是响应不到消息,而Session却直接收到“RETR"的返回码。
请高手帮助,不甚感激!
大概原理是这样的,先从服务器上下载配置文件,比较版本号,然后再下载更新文件
现在有个问题是这样的:
根据FTP的协议,通常需要编写两个Socket,一个Session,一个Data,我采用的是WSAAysncSelect模型,因此需要在主窗口建立消息循环来接消息,由于是要接两个套接字的消息,所有我定义了两个消息循环,本来应该在Session发“RETR”命令之前,调用WSAAysncSelect来启动Data消息循环,但是我的Data消息循环总是响应不到消息,而Session却直接收到“RETR"的返回码。
请高手帮助,不甚感激!
SOCKET fdSession,fdData;
//创建socket
fdSession = socket(...);
WSAAsyncSelect(fdSession,hWnd,WM_APP+1,FD_READ);//协商传输模式,假设是passive模式
fdData = socket(...);
WSAAsyncSelect(fdData,hWnd,WM_APP+1,FD_READ);
bind(fdData,...);
send(fdSession,"PORT ...");
send(fdSession,"RETR ...");
...
void OnSocketMsg(WPARAM w,LPARAM l)
{
//处理WM_APP+1的消息
SOCKET s;
DWORD events;
s = msg.wParam;
events = (uint32_t)(msg.lParam & 0xffff);
if(s==fdSession)
{
//这是应答消息
}
else if(s==fdData)
{
//这是数据
}
}