我正在尝试打开一个文件,然后将内容发送到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) {
}
使用代码的简单示例:
/* 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循环,以防文件包含超过1行(fgets逐行读取)
最后,正如您所看到的,它包含最小的错误检查,我将在socket
不能创建套接字或connect
失败的情况下执行检查。
首先,你需要设置客户端和服务器之间的网络基础设施(尝试查找有关如何在C中创建简单的客户端服务器应用程序的信息)。
然后可以在客户端以二进制模式读取文件。然后,您可以决定是要将整个文件发送到服务器,还是以块的形式发送。
你需要考虑网络功能,如send/recv
可能发送的字节比你告诉他们的要少,所以你可能需要循环,直到你确保所有的字节都被发送。
首先,您可以参考这里,它解决了我提到的所有主要问题。