如何在Client.c中使用file作为参数

时间:2015-10-15 16:17:51

标签: c linux multithreading server client

我有server.c和client.c,我想将文件发送到服务器,但我不知道如何使用它作为客户端的参数发送文件。

2 个答案:

答案 0 :(得分:0)

Web上有很多使用套接字的客户端/服务器代码示例。看一下this的例子,有很多例子。从那里,C标准IO库允许您打开,读取和写入文件。在网上搜索阅读文件的例子。

提示:argv []是程序的字符串参数数组。因此,在调用程序时添加另一个参数。 argc将指示传递的参数数量(包括程序名称),argv [argc-1]将是最后一个参数。

当放在一起,并假设您了解C编程时,您应该能够完成任务。

答案 1 :(得分:0)

您可以参考http://www.binarytides.com/server-client-example-c-sockets-linux/

您可以按照以下enter code here步骤进行操作。 1)从客户端连接到服务器。 2)将文件名发送到服务器。 服务器将在服务器的归属位置创建类似的文件名。 3)将文件内容发送到服务器。 服务器将内容写入服务器主文件夹中创建的文件。

下面给出了一个示例代码段。这描述了文件名如何发送到服务器。

服务器端

/ * 服务器将收到客户端发送的文件名。 客户端将使用touch命令创建文件名 * /

char message[100];
read_size=recv(client_sock,client_message,2000,0);
printf("File Name received:%s\n",client_message);
printf("Creates a file with name:%s\n",client_message);
sprintf(message,"touch %s",client_message);
system(message);
write(client_sock ,"File Name received" , strlen(client_message));

客户端

/ * 客户端将要发送的文件的名称作为参数发送到二进制文件。 argv [1]是要在此处发送的文件名。 使用strcpy,argv [1]正在复制到char数组' filename'。 使用'发送' api客户端应用程序将文件名发送到服务器。 服务器将接受该名称并使用touch命令创建文件名。 下一步是将数据发送到创建的文件。 * /

char filename[256];
strcpy(filename,argv[1]);
if( send(sock , filename , strlen(filename) , 0) < 0)
{
    puts("Send failed");
    return 1;
}
memset(server_reply,'\0',sizeof(server_reply));
if( recv(sock , server_reply , 2000 , 0) < 0)
{ 
   puts("recv failed");
}