Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
服务器与服务器之间的C套接字文件传输;客户_C_Sockets - Fatal编程技术网

服务器与服务器之间的C套接字文件传输;客户

服务器与服务器之间的C套接字文件传输;客户,c,sockets,C,Sockets,我正试图弄清楚如何使用C将文件从服务器发送到客户端。我对C非常陌生,所以不确定我的错误有多大: 代码段服务器: while (1) { len = sizeof(clientAddr); sock = accept(serverSock, (struct sockaddr *) &clientAddr, &len); file = fopen(filename, "rb"); while(!feof(file)) { int f

我正试图弄清楚如何使用C将文件从服务器发送到客户端。我对C非常陌生,所以不确定我的错误有多大:

代码段服务器:

while (1) { 
    len = sizeof(clientAddr); 
    sock = accept(serverSock, (struct sockaddr *) &clientAddr, &len);
    file = fopen(filename, "rb");
    while(!feof(file)) {
        int flen = fread(buffer, 1, sizeof(buffer), file);
        int sz = 0;
          while (sz < flen) {
            int sent = send(sock, &buffer[sz], flen-sz, 0);
            sz += sent;
          }
        printf("Sent file!");
     }
    fclose(file);
    close(sock);
}

基本上,我从服务器上得到一个“分段错误(核心转储)”的错误。有没有关于尝试这样做的指南?感谢您的帮助,谢谢

在尝试使用之前,您可能应该检查
文件
是否为非空。此外,这也是学习如何使用调试器查看分段错误的确切位置和原因的好机会。
buffer
是如何定义的?while语句应该有另一对括号。您正在将
flen
设置为比较结果
recv(…)>0)
。显然不是你想要的。您可能希望
while((flen=recv(…)>0){
flen
设置为
recv
的返回值,并将其与0进行比较。(据我所知,这并不能解释您的分段错误。)的可能重复
int status = connect(sock, (struct sockaddr *)&Address, sizeof(Address));

int flen;
file = fopen(filename, "wb");
while(flen = recv(sock, buffer, sizeof(buffer), 0) > 0) {
    bzero(buffer, sizeof(buffer));
    fwrite(buffer,1, flen, file);
}