socket 实现的 ftp 上传问题 代码如下:CString filename;
CFileFind finder;
int filelength;// 保存文件长度BOOL bWorking = finder.FindFile("*.jpg"); CString str;
GetDlgItemText(IDC_EDIT1,str);SOCKADDR_IN clisa1;
clisa1.sin_addr.S_un.S_addr = inet_addr("192.168.1.66");
clisa1.sin_family = AF_INET;
clisa1.sin_port = htons(atoi(str));connect(svrSock,(SOCKADDR*)&clisa1,sizeof(SOCKADDR));while(bWorking)
{
// 循环取得需传送的文件名
bWorking=finder.FindNextFile();
filename=finder.GetFileName();// 取得该文件的大小
filelength = finder.GetLength();// //通过命令通道发送 size 命令判断服务器上是否存在该文件,如果存在取得文件大小
send(cliSock,"size " + filename + "\r\n",strlen("size ") + filename.GetLength() + strlen("\r\n"),0);char buffer1[100];
memset(buffer1,0,100);recv(cliSock,buffer1,100,0);CString sizestr = buffer1;
CString returncode = sizestr.Left(3);char tempstr1[10];
memset(tempstr1,0,10);int nCount;
CString nRest;// 判断是否已经存在该文件
if(returncode == "213")
{
strcpy(tempstr1,sizestr.Mid(4));
nCount = filelength - atoi(tempstr1);
nRest = tempstr1;
}
else if(returncode == "550")
{
nCount = filelength;
nRest = "0";
}
// 需要续传
if(nCount > 0)
{
int cyclenum;if(nCount%32768 != 0)
{
cyclenum = nCount/32768 + 1;
}
else if(nCount%32768 == 0)
{
cyclenum = nCount/32768;
}CFile fileR(filename,CFile::modeRead|CFile::typeBinary);
char *buffer = new char[32768+1];for(int i = 0; i < cyclenum; i++)
{
memset(buffer, 0x00, (32768+1)*sizeof(BYTE));
//通过命令通道发送命令
send(cliSock,"rest " + nRest + "\r\n",strlen("rest ") + nRest.GetLength() + strlen("\r\n"),0);
memset(buffer1,0,100);
recv(cliSock,buffer1,100,0);
AfxMessageBox(buffer1); //通过命令通道发送命令
send(cliSock,"appe " + filename + "\r\n",strlen("appe ") + filename.GetLength() + strlen("\r\n"),0);
memset(buffer1,0,100);
recv(cliSock,buffer1,100,0);
AfxMessageBox(buffer1);fileR.Seek(atoi(nRest),CFile::begin);
fileR.Read(buffer,32768);int err = send(svrSock,buffer,32768+1,0); //通过数据通道发送数据 char tempstr[10];
memset(tempstr,0,10);strcpy(tempstr,nRest);
itoa((atoi(nRest) + 32768),tempstr,10);
nRest = tempstr;
}fileR.Close();
delete []buffer;
}
}
closesocket(svrSock);
楼主参考一下
CFileFind finder;
int filelength;// 保存文件长度BOOL bWorking = finder.FindFile("*.jpg"); CString str;
GetDlgItemText(IDC_EDIT1,str);SOCKADDR_IN clisa1;
clisa1.sin_addr.S_un.S_addr = inet_addr("192.168.1.66");
clisa1.sin_family = AF_INET;
clisa1.sin_port = htons(atoi(str));connect(svrSock,(SOCKADDR*)&clisa1,sizeof(SOCKADDR));while(bWorking)
{
// 循环取得需传送的文件名
bWorking=finder.FindNextFile();
filename=finder.GetFileName();// 取得该文件的大小
filelength = finder.GetLength();// //通过命令通道发送 size 命令判断服务器上是否存在该文件,如果存在取得文件大小
send(cliSock,"size " + filename + "\r\n",strlen("size ") + filename.GetLength() + strlen("\r\n"),0);char buffer1[100];
memset(buffer1,0,100);recv(cliSock,buffer1,100,0);CString sizestr = buffer1;
CString returncode = sizestr.Left(3);char tempstr1[10];
memset(tempstr1,0,10);int nCount;
CString nRest;// 判断是否已经存在该文件
if(returncode == "213")
{
strcpy(tempstr1,sizestr.Mid(4));
nCount = filelength - atoi(tempstr1);
nRest = tempstr1;
}
else if(returncode == "550")
{
nCount = filelength;
nRest = "0";
}
// 需要续传
if(nCount > 0)
{
int cyclenum;if(nCount%32768 != 0)
{
cyclenum = nCount/32768 + 1;
}
else if(nCount%32768 == 0)
{
cyclenum = nCount/32768;
}CFile fileR(filename,CFile::modeRead|CFile::typeBinary);
char *buffer = new char[32768+1];for(int i = 0; i < cyclenum; i++)
{
memset(buffer, 0x00, (32768+1)*sizeof(BYTE));
//通过命令通道发送命令
send(cliSock,"rest " + nRest + "\r\n",strlen("rest ") + nRest.GetLength() + strlen("\r\n"),0);
memset(buffer1,0,100);
recv(cliSock,buffer1,100,0);
AfxMessageBox(buffer1); //通过命令通道发送命令
send(cliSock,"appe " + filename + "\r\n",strlen("appe ") + filename.GetLength() + strlen("\r\n"),0);
memset(buffer1,0,100);
recv(cliSock,buffer1,100,0);
AfxMessageBox(buffer1);fileR.Seek(atoi(nRest),CFile::begin);
fileR.Read(buffer,32768);int err = send(svrSock,buffer,32768+1,0); //通过数据通道发送数据 char tempstr[10];
memset(tempstr,0,10);strcpy(tempstr,nRest);
itoa((atoi(nRest) + 32768),tempstr,10);
nRest = tempstr;
}fileR.Close();
delete []buffer;
}
}
closesocket(svrSock);
楼主参考一下
解决方案 »
- 系统刚开始正常,后来报java.sql.DriverManager.registerDriver()
- webserver 获取客户端ip
- BI系统
- 求输入流解析程序
- websphere如何使用odbc连接数据库啊?请高手指点
- 我对数据库进行操作的时候发生的错误,解决不了,请高手指教
- 还请大家帮帮忙,关于weblogic8的问题!
- 使用JMS传递XML格式的数据,应该使用哪些api?JAXP? SAX? JDOM? DOM? Xerces? Weblogic.XMLMessage ?
- 那位知道J2EE服务器和EJB服务器有什么关系?
- 同一账户用不同浏览器登录或不同电脑登录,session问题?
- 找不到打包的ear中对应的配置文件,总提示NULL指针异常,请教高手
- spring+hibernate做查询时,如果查到数据就保错,查不到就没事,怎么回事
http://hc.apache.org/httpclient-3.x/