【问题标题】:How to use file as an argument in Client.c如何在 Client.c 中使用文件作为参数
【发布时间】:2016-01-14 05:02:27
【问题描述】:

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

【问题讨论】:

  • 需要上下文... server 启动 client 作为子进程?您是否使用多线程(因为存在“多线程”标签)?
  • 在 client.c 中,参数应该是 3,但我应该将其更改为 4,第 4 个应该是将发送到 server.c 的文件名
  • int main(int argc, char argv[]) { int sockfd, portno, n;结构 sockaddr_in serv_addr;结构主机*服务器;字符缓冲区[BUFFERLENGTH]; if (argc 创建套接字 /portno = atoi (argv[2]); sockfd = 套接字(AF_INET,SOCK_STREAM,0); if (sockfd 输入连接数据 */ server = gethostbyname (argv[1]); if (server == NULL) { fprintf (stderr, "ERROR, no such host\n");出口(1); } ..
  • @John - 那么您的第 4 个参数应该是字符串,在 client.c 中您将其视为文件名并将其发送到服务器
  • 不要将代码放入 cmets,而是编辑您的问题

标签: c linux multithreading server client


【解决方案1】:

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

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

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

服务器端

/* 服务器将接收客户端发送的文件名。 客户端将使用 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 数组“文件名”。 使用 'send' 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");
}

【讨论】:

  • @Midhun Lohidakshan 先生,您能解释一下如何将文件名发送到服务器吗??
【解决方案2】:

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

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

综合起来,假设您了解 C 编程,您应该能够完成您的任务。

【讨论】:

  • 我只是不明白这部分所以应该有什么变化?(( if (argc
  • 为什么 argv[0] 写在那里?请告诉我Les先生(
猜你喜欢
  • 2011-01-11
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 2015-02-04
  • 2012-09-28
  • 1970-01-01
  • 2019-11-01
  • 2017-12-30
相关资源
最近更新 更多