FTPClient

FTPClient
FTPClient

void CFTPClientDlg::OnConnect()

{

if(!CreateControl())//建立控制连接

return;

if(!DataConnect())//建立数据连接

return;

if(!ListDisp())//读取服务器目录文件列表

return;

}

void CFTPClientDlg::OnExit()

{

CommandMemset("QUIT");

if(!SendCommand()) //发送QUIT命令

return;

else {

if(respondcode==221) //判断QUIT应答码

{

// m_Login+="Server: ";

// m_Login+=Respond;

// m_Directory="";

}

else {

MessageBox("QUIT响应错误!");

closesocket(ClientControl);

WSACleanup();

return;

}

}

UpdateData(false);

closesocket(ClientControl);

WSACleanup(); //释放套接字绑定

}

bool CFTPClientDlg::Receive()

{

int nRecv;

memset(respond,0,Maxsize);

nRecv=recv(ClientControl,respond,Maxsize,0);

if(nRecv==SOCKET_ERROR) //通过连接接收响应{

MessageBox("Socket接收失败!");

closesocket(ClientControl);

WSACleanup();

return false;

}

char* ReplyCodes=new char[3]; //从响应中解析响应码

memset(ReplyCodes,0,3);

memcpy(ReplyCodes,respond,3);

respondcode=atoi(ReplyCodes);

return true;

}

bool CFTPClientDlg::CreateControl()

{

WSADATA WSAData;

if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) //建立套接字绑定

{

MessageBox("初始化Winsock失败!");

return false;

}

ClientControl=socket(AF_INET,SOCK_STREAM,0); //创建连接套接字

if(ClientControl==INV ALID_SOCKET)

{

MessageBox("创建控制Socket失败!");

WSACleanup();

return false;

}

sockaddr_in Serveraddr; //定义套接字地址

memset(&Serveraddr,0,sizeof(Serveraddr));

Serveraddr.sin_family=AF_INET;

Serveraddr.sin_port=htons(21);

Serveraddr.sin_addr.S_un.s_addr=htonl("192.168.1.45");

int nConnect;

nConnect=connect(ClientControl,(sockaddr*)&Serveraddr,sizeof(Serveraddr));

if(nConnect==SOCKET_ERROR) //建立FTP控制连接

{

MessageBox("控制连接建立失败!");

closesocket(ClientControl);

WSACleanup();

return false;

}

if(!Receive())

return false;

else {

if(respondcode==220) //判断连接应答码

{

}

else {

MessageBox("控制连接响应错误!");

closesocket(ClientControl);

WSACleanup();

return false;

}

}

CommandMemset("USER", "anonymous");

if(!SendCommand())

return false;

if(!Receive())

return false;

else {

if(respondcode==220||respondcode==331) //判断USER应答码

{

if(respondcode==331)

{

CommandMemset("PASS", "IEUser@");

if(!SendCommand()) //发送PASS命令

return false;

}

if(!Receive())

return false;

else {

if(respondcode==230) //判断PASS应答码

{ }

else {

MessageBox("PASS响应错误!");

closesocket(ClientControl);

WSACleanup();

return false;

}

}

return true;

}

bool CFTPClientDlg::DataConnect()

{

CommandMemset("PASV");

if(!SendCommand()) //发送PASV命令

return false;

if(!Receive())

return false;

else {

if(RespondCode!=227) //判断PASV应答码

{

MessageBox("PASV响应错误!");

closesocket(ClientControl);

WSACleanup();

return false;

}

}

char* part[6];

if(strtok(respond,"(")) //分离PASV应答信息

{

for(int i=0;i<5;i++)

{

part[i]=strtok(NULL,",");

if(!part[i])

return false;

}

part[5]=strtok(NULL,")");

if(!part[5])

return false;

}

else

return false;

unsigned short newport;

newport=unsigned short((atoi(part[4])<<8)+atoi(part[5]));

ClientData=socket(AF_INET,SOCK_STREAM,0); //创建连接套接字if(ClientData==INV ALID_SOCKET)

{

MessageBox("创建数据Socket失败!");

closesocket(ClientControl);

WSACleanup();

return false;

}

sockaddr_in Serveraddrdata; //定义套接字地址

memset(&Serveraddrdata,0,sizeof(Serveraddrdata));

Serveraddrdata.sin_family=AF_INET;

Serveraddrdata.sin_port=htons(newport);

Serveraddrdata.sin_addr.s_addr=htonl("192.168.1.45");

int nConnect;

nConnect=connect(SocketData,(sockaddr*)&Serveraddr2,sizeof(Serveraddr2));

if(nConnect==SOCKET_ERROR) //建立FTP数据连接

{

MessageBox("数据连接建立失败!");

closesocket(ClientControl);

closesocket(SocketData);

WSACleanup();

return false;

}

return true;

}

void CFTPClientDlg::CommandMemset(LPCTSTR x)

{

memset(Command,0,Maxsize);

memcpy(Command,x,strlen(x)); //合成USER命令

memcpy(Command+strlen(x),"\r\n",2);

}

bool CFTPClientDlg::SendCommand()

{

int nSend;

nSend=send(ClientControl,Command,strlen(Command),0);

if(nSend==SOCKET_ERROR) //通过连接发送命令

{

MessageBox("命令发送失败!");

closesocket(ClientControl);

WSACleanup();

return false;

}

return true;

}

void CFTPClientDlg::CommandMemset(LPCTSTR x, LPCTSTR y)

{

memset(Command,0,Maxsize);

memcpy(Command,x,strlen(x)); //合成命令

memcpy(Command+strlen(x),y,strlen(y));

memcpy(Command+strlen(x)+strlen(y),"\r\n",2);

}

bool CFTPClientDlg::ListDisp()

{

CommandMemset("LIST");

if(!SendCommand()) //发送LIST命令

return false;

if(!Receive())

return false;

else {

if(respondcode!=125||respondcode!=150||respondcode!=226)

{

MessageBox("LIST响应错误!");

closesocket(ClientControl);

WSACleanup();

return false;

}

while(true)

{

char ListBuf[MAX_SIZE];

memset(ListBuf,0,MAX_SIZE);

int nRecv;

nRecv=recv(SocketData,ListBuf,MAX_SIZE,0);

if(nRecv==SOCKET_ERROR) //读取目录信息

{

MessageBox("LIST接收错误!");

closesocket(ClientData);

WSACleanup();

return false;

}

if(nRecv<=0)

break;

m_Directory=ListBuf; //显示目录信息

}

closesocket(ClientData); //关闭数据连接

if(!!Receive())

return false;

else

{

if(respondcode==226) //判断LIST应答码

{

}

else {

MessageBox("LIST响应错误!");

closesocket(ClientControl);

WSACleanup();

return false;

}

}

}

}

return true;

}

ABAP-本地文件上载到SAP 服务器

DATA: fname TYPE rlgrap-filename, ftype TYPE rlgrap-filetype, fsize TYPE i. DATA: fname_p TYPE string, fname_n TYPE string. DATA: sfname_p TYPE string . DATA: sfname LIKE rcgiedial-iefile. sfname_p = './'. DATA: r(1) TYPE c. DATA: data_tab LIKE rcgrepfile OCCURS 10 WITH HEADER LINE. DATA: lines TYPE i. CALL FUNCTION 'UPLOAD' EXPORTING filename = 'c:/' filetype = 'BIN' filetype_no_change = 'X' IMPORTING filesize = fsize act_filename = fname act_filetype = ftype TABLES data_tab = data_tab EXCEPTIONS conversion_error = 1 invalid_table_width = 2 invalid_type = 3. fname_n = fname. DO. SPLIT fname_n AT '/' INTO fname_p fname_n. SEARCH fname_n FOR '/'. IF sy-subrc = 4. EXIT.

ENDIF. ENDDO. fname_p = fname. SHIFT fname_p RIGHT DELETING TRAILING fname_n. SHIFT fname_p LEFT DELETING LEADING space. CONCATENATE sfname_p fname_n INTO sfname. DESCRIBE TABLE data_tab LINES lines. CALL FUNCTION 'C13Z_RAWDATA_WRITE' EXPORTING i_file = sfname i_file_size = fsize i_lines = lines TABLES i_rcgrepfile_tab = data_tab EXCEPTIONS no_permission = 1 open_failed = 2 OTHERS = 3. IF sy-subrc NE 0. MESSAGE i000(znyj13) WITH 'UPLOAD SUCC'. ENDIF. WRITE: 'SY-SUBRC:', sy-subrc, / '上载的本地文件名:', (60) fname, / '上载的远程文件名:',(60) sfname, / '文件类型:', ftype, / '文件大小:', fsize. SKIP.

在WinForm中通过HTTP协议向服务器端上传文件

在WinForm中通过HTTP协议向服务器端上传文件相信用https://www.360docs.net/doc/d912963252.html,写一个上传文件的网页大家都会写但是有没有人想过通过在WinForm中通过HTTP协议上传文件呢有些人说要向服务器端上传文件用FTP协议不是很简单吗效率又高为什么还要使用HTTP协议那么麻烦呢这里面有几个原因1FTP服务器的部署相对麻烦还要设置权限权限设置不对还会惹来一系列的安全问题。2如果双方都还有防火墙又不想开发FTP相关的一些端口时HTTP就会大派用场就像WEB Services能穿透防火墙一样。3其他的...还在想呢... 但是使用HTTP也有他的一些问题例如不能断点续传大文件上传很难速度很慢所以HTTP协议上传的文件大小不应该太大。说了这么多原归正传一般来说在Winform里通过HTTP 上传文件有几种可选的方法1前面提到的Web Services就是一种很好的方法通过编写一个WebMethod包含有byte 类型的参数然后调用Web Services的方法文件内容就会以Base64编码传到服务器上然后重新保存即可。WebMethod public void UploadFilebyte contentstring filename... Stream sw new StreamWriter... sw.Close 当然这种通过Base64编码的方法效率比较低那么可以采用WSE支持附件并以2进制形式传送效率会更高。2除了通过WebService另外一种更简单的方法就是通过WebClient或者HttpWebRequest来模拟HTTP的POST动作来实现。这时候首先需要编写一个https://www.360docs.net/doc/d912963252.html,

用ACCESS向ftp服务器上传文件

用ACCESS向ftp服务器上传文件 用API调用: '声明: Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _ (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _ ByVal sProxyBypass As String, ByVal lFlags As Long) As Long Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _ (ByVal hInternetSession As Long, ByVal sServerName As String, _ ByVal nServerPort As Integer, ByVal sUsername As String, _ ByVal sPassword As String, ByVal lService As Long, _ ByVal lFlags As Long, ByVal lContext As Long) As Long Private Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _ (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _ ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _ ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _ ByVal dwContext As Long) As Boolean Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _ (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _ ByVal lpszRemoteFile As String, ByVal dwFlags As Long, _ ByVal dwContext As Long) As Boolean Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer '函数 Private Function UpLoadFile(ByVal LocateFile As String, ByVal RemoteFile As String) As

goAhead上实现文件上传到嵌入式Web服务器上

goAhead上实现文件上传到嵌入式Web服务器上 本文内容概要:详细描述了在goAhead 2.5上如何实现文件上传(上传文件)到服务器端的功能。 开发环境: 宿主机:Windows XP; 虚拟机:Ubuntu 9.10; 交叉编译器:arm-uclibc-gcc(arm-linux-gcc-4.3.2可以顺利编译通过)——————————————————————————————————— 1. 说明 最近调试web文件上传到服务器功能,但在调试时,处理函数总是获取不到文件路径,百思不得其解,查了网上许多文章,但大多提到的是前端文件上传的原理、实现方式等,而未提供服务器端处理的实现(利用C函数实现)。此外,由于对web不了解,花了些时间研究web程序。 2. goAhead实现文件上传的方法 总得来说,goAhead上实现文件上传功能是比较容易的。因为有现成的代码可用,稍微移植下即可。 2.1 实现原理 使用html form即表单提交文件上传请求,web服务器核心处理接收客户端Post过来的文件数据(注意post的是二进制数据),最后,web服务器把接收到文件数据以二进制格式写到服务器本端存储系统。 2.2 前端设计 前端设计比较简单,就是设计一个form,type属性为file,本人是在goAhead-2.5附带的wwwdemo的asptest.asp网页上增加了一个这样的form。 1. 2. 3. 4. 5.