资源简介
基于winsock文件传输的C++文件传输实现,TCP/IP协议,服务端和客户端都有,简单易学
![](http://www.nz998.com/pic/69112.jpg)
代码片段和文件信息
#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
相关资源
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 文件传输和聊天程序(c语言实现)
- C语言中 文件读取和写入的详细操作代
- 基于STM32F407ZG的监控摄像头及FATFS文件
- 51单片机protues文件(KST-51.DSN)
- PE文件操作代码
- 基于CS的TCP文件传输程序设计
- socket客户端.c
- socket服务端.c
- windows网络编程_文件传输
- socket tcp应用
- 微型文件系统源码(FatFs)
- diy写字机grbl v1.1源代码
- Hex文件转bin文件
- stm32 实现Fatfs对U盘文件操作(main.c)
- c++ 文件操作(读取、写入)
- dll依赖文件检测工具
- socket通讯c++源码(客户端+服务端)
- MFC的异步网络通讯应用程序
- QT 计算文件夹内所有代码行数
- c++curllib传输json使用
- C++Builder XE7 update1 和谐文件亲测可用
- c++实现的文件上传服务器
- 标准的MD5源码md5.cmd5.h使用说明文件
- C语言math.h文件使用说明及相应程序
- ffmpeg推流视频文件到rtmp服务器
- C语言解惑—指针、数组、函数和多文
评论
共有 条评论