C - 将文件内容写入缓冲区

时间:2015-06-05 21:54:15

标签: c file sockets tcp client

我尝试打开文件然后将内容发送到TCP服务器。目前,我只是打开文件并将数据发送到缓冲区,服务器将访问该缓冲区。我不确定如何执行此操作以及如何跟踪单独文件中的所有位。我没有找到具体的答案,只是朝着正确的方向迈出一步将有助于加载!谢谢!

/* Open the input file to read */
FILE *fp;
fp = fopen(input_file, "r");

if (fp == NULL) {
    perror("Error opening the file");
    return(-1);
}

/* Send the contents of the input file to the server */ 
if (fgets(recvBuffer, buffer_size, fp)!=NULL) {

}

2 个答案:

答案 0 :(得分:2)

使用代码的简单示例:

/* Open the input file to read */
FILE *fp;
fp = fopen(input_file, "r");

/*create address struct*/
struct sockaddr_in dest;
bzero(&dest,sizeof(dest));
dest.sin_family = AF_INET;
dest.sin_addr.s_addr=inet_addr(/*addr*/); //ex "127.0.0.1"
dest.sin_port=htons(/*port*/); //ex 8888

if (fp == NULL) {
    perror("Error opening the file");
    return(-1);
}

int sock_fp = socket(AF_INET, SOCK_STREAM, 0); /*create socket with TCP transfer protocol*/
connect(sock_fp, (struct sockaddr *) &dest, sizeof(dest)); /*connect to server*/

/* Send the contents of the input file to the server */ 
while (fgets(recvBuffer, buffer_size, fp)!=NULL) {
    sendto(sock_fp, recvBuffer, strlen(recvBuffer), 0, (struct sockaddr *)&dest, sizeof(dest));
}

close(sock_fp);

请注意,您需要在该端口上提供的地址中使用服务器。 另请注意,我将if更改为while循环,以防文件包含多行(fgets逐行读取)
最后,正如您所知,这包含最少的错误检查,我会执行检查,以防socket无法创建套接字或connect失败。

答案 1 :(得分:1)

首先,您需要在客户端和服务器之间设置网络基础结构(尝试查找有关如何在C中创建简单客户端服务器应用程序的信息)。

然后您可以在客户端以二进制模式读取文件。然后,您可以决定是将整个文件发送到服务器,还是以块的形式发送。

您需要考虑send/recv之类的网络功能可能发送的字节数比您告诉的少 - 所以您可能需要循环,直到确保发送所有字节为止。

首先,您可以参考here,其中涉及我提到的所有要点。