【发布时间】:2018-07-22 08:16:27
【问题描述】:
我正在尝试在 C 中的套接字之间编写一个简单的文件传输。我的客户端代码如下所示:
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char **argv){
int sockfd, n;
struct sockaddr_in servaddr;
sockfd=socket(AF_INET,SOCK_STREAM,0);
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(22000);
inet_pton(AF_INET, "127.0.0.1", &(servaddr.sin_addr));
connect(sockfd,(struct sockaddr *)&servaddr, sizeof(servaddr));
FILE* fp;
fp = fopen("text.txt", "r");
sendfile(sockfd, fp, NULL, 100);
}
我的服务器代码如下所示:
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int listen_fd, comm_fd;
struct sockaddr_in servaddr;
listen_fd = socket(AF_INET, SOCK_STREAM, 0);
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htons(INADDR_ANY);
servaddr.sin_port = htons(22000);
bind(listen_fd, (struct sockaddr *) &servaddr, sizeof(servaddr));
listen(listen_fd, 10);
comm_fd = accept(listen_fd, (struct sockaddr*) NULL, NULL);
int bytes;
char rec[100];
FILE * fp;
fp = fopen("random.txt", "w");
while((bytes = read(comm_fd, rec, 100)) > 0){
fwrite(rec, 1, bytes, fp);
}
}
如您所见,我正在从客户端向服务器发送text.txt 文件。然后在服务器上,我尝试读取它并将内容放在random.txt 中的while 循环中,但是当我执行它们时,客户端完成工作,服务器不会停止工作并且random.txt 中没有写入任何内容。
你能说出原因吗?
【问题讨论】:
-
检查返回码。
-
漂亮干净的错误检查和记录整个代码,免费提供调试。
标签: c file sockets networking tcp