资源简介

基于winsock文件传输的C++文件传输实现,TCP/IP协议,服务端和客户端都有,简单易学

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include
#include
#include
using namespace std;
#pragma comment(lib“ws2_32.lib“)
#define DEFAULT_PORT “2222“
#define DEFAULT_ADDRESS “127.0.0.1“


void showHelp();
int clientDirFun(SOCKET);
int clientGetFun(SOCKET s char* char*);
int clientPutFun(SOCKET s char* char*);
void HandleError(SOCKET s int ret);
int sstream2char(stringstream& char*);
int connectServer(SOCKET sockaddr_in);

int main(int argc char** argv)
{
puts(“----------------------------------------------“);
printf(“usage: client [server ip] [server port] [work path]\n“);
printf(“‘?‘ to get command info\n“);
struct sockaddr_in clientAddr;
struct sockaddr_in serverAddr;
WSADATA wsdata;
SOCKET serversocket;
char input1[10] = {0};
char input2[40] = {0};
char sendbuf[80] = {0};
char recvbuf[80] = {0};
char path[256] = {0};
string line;
FILE *testFile = NULL;

if(WSAStartup(MAKEWORD(22) &wsdata) != 0)
{
WSACleanup();
cerr<<“WSAStartup() failed!/n“;
}
serversocket = socket(AF_INET SOCK_STREAM IPPROTO_TCP);
if(serversocket<0)
cerr<<“socket() failed!/n“;

serverAddr.sin_family = AF_INET;
if(argc < 3)
{
serverAddr.sin_port = htons(atoi(DEFAULT_PORT));
serverAddr.sin_addr.s_addr = inet_addr(DEFAULT_ADDRESS);
}
else
{
serverAddr.sin_port = htons(atoi(argv[2]));
serverAddr.sin_addr.s_addr = inet_addr(argv[1]);
}
if(argc == 4)
{
strcat(path argv[3]);
strcat(path “\\“);
}

if(connectServer(serversocket serverAddr) != 0)
{
cin.get();
return 1;
}

while(true)
{
cout<<“ftp> “;
cin.sync();
getline(cin line);
if(line == ““)
continue;
stringstream linebuf;
linebuf< sstream2char(linebuf input1);
if(!strcmp(input1 “?“))
{
showHelp();
continue;
}
else if(!strcmp(input1 “quit“))
break;
else if(!strcmp(input1 “dir“))
{
clientDirFun(serversocket);
continue;
}
else if(!strcmp(input1 “re“))
{
if(connectServer(serversocket serverAddr) != 0)
cin.get();
continue;
}

else if(sstream2char(linebuf input2) != -1)
{
if(input2[0] != ‘\0‘)
{
char filePath[256] = {0};
if(path!=““)
strcat(filePath path);
strcat(filePath input2);
if(!strcmp(input1 “get“))
{
if((testFile = fopen(filePath “r“)) != NULL)
{
fclose(testFile);
char ans = 0;
while(ans != ‘Y‘ && ans != ‘y‘ && ans != ‘N‘ && ans != ‘n‘)
{
printf(“File %s already exists. Overwrite? Y/N  “ 
input2);
cin>>ans;
}
if(ans == ‘Y‘ || ans == ‘y‘)
HandleError(serversocket
clientGetFun(serversocket path input2));
cout< continue;
}
else
{
HandleError(serversocket
clientGetFun(serversocket path input2));
continue;
}
}
else if(!strc

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4877  2015-01-04 21:20  server.cpp

     文件       7206  2015-01-07 23:43  client.cpp

----------- ---------  ---------- -----  ----

                12083                    2


评论

共有 条评论