0

我正在尝试将文件从客户端流式传输到服务器,但是从 FILE 到 char 的数据类型不兼容,因此每次运行客户端时都会出现分段错误。我不知道如何解决这个问题。附件是服务器和客户端的代码,下面是客户端的问题。我正在尝试从客户端读取文件到缓冲区将其发送到服务器,服务器将从缓冲区读取文件并将其写入文件。客户端 http://pastebin.com/QtLbMgP3

服务器端 http://pastebin.com/8PNchBUZ

// n = write(sock,"send me your message",18);
    printf("Please enter the message: ");
    bzero(buffer,256);
    fgets(buffer,255,stdin);
        ptr_myfile=fopen("test2.txt","w");

         for(counter=1;counter <=10;counter++){
             fwrite(&ptr_myfile,sizeof(*buffer),1,buffer);
             n = read(sockfd,buffer,255);
             n = write(sockfd,buffer,18);

             n = write(sockfd,buffer,strlen(buffer));
             if (n < 0) error("ERROR writing to socket");
             bzero(buffer,256);
             n = read(sockfd,buffer,255);
             if (n < 0) error("ERROR reading from socket");
             // printf("%s\n",buffer);
         };//close for loop
    close(sockfd);

    }// close event loop
    return 0;
}// close main function
4

3 回答 3

1

无需遍历所有代码,read, write,close系列 API(NOT fopen,fread等)具有整数描述符,而不是FILE*.

你不能FILE*int.

于 2012-09-20T04:34:05.993 回答
1

在这里查看这一行:

fwrite(&ptr_myfile,sizeof(*buffer),1,buffer);

这甚至是如何编译的?

这可能是正确的:

fwrite(buffer, 1, sizeof(buffer), ptr_myfile );

上面的行将从文件中读取最多256 个字节(缓冲区数组的大小)并将数据复制到buffer中。请注意,我传递的是 ptr_myfile,而不是 &ptr_myfile。

于 2012-09-20T04:40:57.077 回答
1

检查您的 fwrite 语句,您是要写入文件还是从文件中读取缓冲区?

如果是前一种情况,则使用 fwrite(buffer, sizeof(buffer),1, ptr_myfile) ,即您要写入的流是最后一个变量。

如果是后者,那么您首先需要使用 fgets 或 getchar 或类似的函数从流中读取,然后才能将其实际放入缓冲区。

希望能帮助到你!


好的,在客户端读取文件并将其发送到服务器,

fp=fopen("<filename>", "r");
//This opens the file and initializes the pointer fp to the start of the file Start of
//the file, not its text necessarily

现在您可以使用 fgetc() 函数 [Character by character] 或 fgets() 函数 [如果文本被格式化,您可以将整行读入缓冲区] 将文件读入缓冲区。

fgets(buffer,sizeof(buffer),fp);
//This could be ambiguous as the second argument should correspond to
//pre-known limit of bytes to read here some Macro maybe.

现在,简单地使用 send() 将该缓冲区分派到服务器。

在服务器端,使用 recv() 将来自网络的输入数据接收到某个“缓冲区”中,并使用 fputs 或 fprintf 或任何方便的函数写入以写入模式打开的文件。

于 2012-09-20T04:47:24.390 回答