实现客户端向服务器传文件,socket连接已建立好,不会文件读入,高手来,分不是问题
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)通常是指计算机网络中连接服务器端并运行远程桌面软件的终端设备。客控主机既可以是软件,也可以是硬件。
0条评论