包含的头文件
#include "winsock.h"
#include "stdio.h"
消息响应函数代码:
WORD wVersionRequested;
WSADATA wsaData;
char name[255]; //name里是本机名
CString ip; //本机IP
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD( 1, 1 );
if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
{
if( gethostname ( name, sizeof(name)) == 0)
{
if((hostinfo = gethostbyname(name)) != NULL)
{
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
}
}
WSACleanup( );
}
// AfxMessageBox(name);//name里是本机名
// AfxMessageBox(ip); //ip中是本机IP
CStdioFile File;
File.Open("C://ip.txt",CFile::modeCreate|CFile::modeReadWrite);
//如果文件事先不存在的话,就需要CFile::modeCreate,否则就不需要。
File.WriteString(ip+":"+"8000");
File.Close(); //注意,这里一定要把文件关闭,否则不能成功上传
CString host="204.45.67.11";
CString user="19337";
CString password="1234567";
TRACE(":%s:%s:%s:%s/n", host,
user, password, "C://ip.txt");
CInternetSession session
(AfxGetApp()->m_pszAppName);
CFtpConnection* pConn = NULL;
pConn = session.GetFtpConnection (host,user,password);
if (pConn) {
if (!pConn->PutFile("C://ip.txt","ip.txt"))
{
MessageBox("传送文件失败??");
} else {
MessageBox("传送文件成功!");
}
pConn->Close();
delete pConn;
session.Close();
} else {
MessageBox("Cannot Connect");
}
小结:程序调通以后一直无法上传,通过跟踪调试,发现pConn->PutFile("C://ip.txt","ip.txt")返回值为零,发生异常
网上有高手建议使用GetLasterror查看出了什么错误,返回32:进程被占用
查了一下之后发现是自己的程序在占用,分析原因发现,生成文件在写入信息后没有关闭,所以一直在占用 调用Close函数关闭后,上传成功