www.pudn.com > Ftpwork > FtpSocket.cpp
#include "FtpSocket.h" #include#include "String.h" #define BLOCKSIZE 1024 BOOL FtpSocket::Send(void* buf, size_t len, int isBlock, int flag=0) { size_t sentlen=0; sentlen = send(socketid, buf,len,flag); if( sentlen != len) return FALSE; if(isBlock == RETURN) return TRUE; else { recv(socketid, ackbuf,1024,0); if(ackbuf[0]=='a') return TRUE; else return FALSE; } } int FtpSocket::Recv(char* buf, size_t len, int isBlock, int flag=0) { int recvnum=0; recvnum=recv(socketid, buf ,len, flag); if(isBlock==BLOCK) { send(socketid,ack,strlen(ack),0); } return recvnum; } //##ModelId=3DB5036E01CF FtpSocket::FtpSocket(){ if((socketid = socket( AF_INET, SOCK_STREAM, 0))==NULL) { perror("socket error!"); } ack[0]='a'; ack[1]='\0'; } //##ModelId=3DB5036E01D0 FtpSocket::FtpSocket(int newsocket){ socketid = newsocket; ack[0]='a'; ack[1]='\0'; } //##ModelId=3DB5036E0229 FtpSocket FtpSocket::Accept() { socklen_t len; int news= accept(socketid, &remoteaddr, &len); if(news >0) { return FtpSocket(news); } } //##ModelId=3DB5036E0234 BOOL FtpSocket::Connect(struct sockaddr* remoteaddr) { if(connect(socketid, remoteaddr, sizeof(struct sockaddr))==-1) { return FALSE; } return TRUE; } //##ModelId=3DB5036E01E3 BOOL FtpSocket::Bind(struct sockaddr* localaddr) { if( bind(socketid, localaddr,sizeof(struct sockaddr))<0) return FALSE; return TRUE; } //##ModelId=3DB5036E01ED void FtpSocket::Listen(int maxpending) { listen(socketid,maxpending); } //##ModelId=3DB5036E0233 void FtpSocket::Close() { close(socketid); } //##ModelId=3DB5036E0201 BOOL FtpSocket::SendData(void* buf, size_t len, int isBlock, int flag=0) { char temp[11]; sprintf(temp, "%d",len); if(Send(temp,11,BLOCK)== FALSE) return FALSE; int addition =1; if( (len % BLOCKSIZE )==0) addition =0; long loopnum = (long)(len / BLOCKSIZE)+addition; char * sendbuf; sendbuf = (char*) buf; for(long i = 0; i < loopnum -1; i++) { sendbuf = (char*)buf + i * BLOCKSIZE ; if(Send( sendbuf, BLOCKSIZE, BLOCK) == FALSE) return FALSE; } size_t offset = (loopnum -1) * BLOCKSIZE; sendbuf = (char*) buf + offset; return Send( sendbuf , len - offset , BLOCK); } //##ModelId=3DB5036E0247 int FtpSocket::RecvData(char* buf, size_t len, int isBlock,int flag=0) { char numstr[11]; long length=0; long recvnum=0; int counter =0; //char buffer[1100]; if(Recv(numstr,11,BLOCK)==FALSE) return -1; String temp(numstr); length = temp.toLong(); recvnum= Recv(buf,1100,BLOCK); while( recvnum < length) { counter ++; recvnum+= Recv(buf + counter * BLOCKSIZE,1100,BLOCK); } return recvnum; } //##ModelId=3DB5036E01D9 FtpSocket::~FtpSocket(){ Close(); } //##ModelId=3DB50C980042 BOOL FtpSocket::Open() { }