实现客户端向服务器传文件,socket连接已建立好,不会文件读入,高手来,分不是问题

实现客户端向服务器传文件,socket连接已建立好,不会文件读入,高手来,分不是问题,第1张

调用程序时把要传输的文件名作为第三个参数。

Clientexe IPAddress Port FileName

然后在程序中判断argv[3]为文件名(如果想支持多文件发送,则argv4以后的也可以判断为要发送的文件,类似Clientexe IPAddress Port FileName1 FileName2)。

至于读写文件,其实很简单,用fopen或fstream均可。

以下是fopen的例子: (为了保持格式用了一个特殊的空格,如果要编译自己批量替换下)

int main(int argc, char argv[])

{

��if (argc < 4)

��{

����ShowUage();

��}

��//初始化通讯的省略。

��

��for (size_t i = 3; i< argc; ++i )

��{

����char fileName = argv[i];

����if (FileExist(fileName))

����{

������SendFileName(theSocket, fileName);

������SendFileSize(theSocket, fileName);

������SendFileContent(theSocket, fileName);

����}

��}

}

bool FileExist(char fileName)

{

��FILE fp = fopen(fileName, "rb");

��if (fp !=NULL)

��{

����fclose(fp);

����return TRUE;

��}

��return FALSE;

}

SendFileName(theSocket, char fileName)

{

��size_t length = strlen(fileName);

��send( theSocket, &length, 4, 0 );

��send( theSocket, fileName, length, 0 );

}

SendFileSize(theSocket, char fileName)

{

��FILE fp = fopen(fileName, "rb");

��fseek(fp, 0, SEEK_END);

��size_t fileSize = ftell(fp);

��fclose(fp);

��send( theSocket, &fileSize, 4, 0 );

}

SendFile(theSocket, char fileName)

{

��FILE fp = fopen(fileName, "rb");

��unsigned char buffer[512];

��while (!feof(fp))

��{

����size_t size�= fread(buffer, 1, sizeof(buffer), fp);

����send( theSocket, &buffer, size, 0 );

��}

}

对应接收端要另外实现RecvFileName,RecvFileSize,RecvFile这三个接口。

客控主机(Client Host)通常是指计算机网络中连接服务器端并运行远程桌面软件的终端设备。客控主机既可以是软件,也可以是硬件。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 实现客户端向服务器传文件,socket连接已建立好,不会文件读入,高手来,分不是问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情