Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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-使用winsock下载文件不完整_C_Windows - Fatal编程技术网

c-使用winsock下载文件不完整

c-使用winsock下载文件不完整,c,windows,C,Windows,我有一个代码可以下载我网站的.exe,但问题是只下载1kb,我不知道为什么。也许是头球,但我不确定 这是我的代码: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <winsock2.h> #include <windows.h> #defin

我有一个代码可以下载我网站的.exe,但问题是只下载1kb,我不知道为什么。也许是头球,但我不确定

这是我的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h> 
#include <string.h>
#include <winsock2.h>
#include <windows.h>

#define LEN_BUFF 400
#define CHUNK_SIZE 3000

int main() {    
    SOCKET fd;
    WSADATA wsaData;
    struct hostent *server;
    unsigned long addr = 0;

    struct sockaddr_in client;
    char Buffer[LEN_BUFF];

    if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0) {
        printf("Error al iniciar el socket: %d",WSAGetLastError());
        getchar();
        return 1;
    }

    client.sin_family = AF_INET;
    client.sin_addr.s_addr = INADDR_ANY;
    client.sin_port = htons(80);
    server = gethostbyname("185.28.21.141");

    if(server == NULL) {
        printf("Server desconocido\n");
        getchar();
        return 1;
    }

    memcpy((char *) &client.sin_addr, server->h_addr, server->h_length);

    if((fd = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
        printf("Error al iniciar socket\n");
        getchar();
        return 1;
    }

    if(connect(fd, (struct sockaddr *) &client, sizeof(client)) < 0) {
        printf("Error en connect()\n");
        getchar();
        return 1;
    }

    sprintf(Buffer, "GET %s HTTP/1.1\r\n\r\n", "/archivo/cliente_to_linux.exe");
    send(fd, Buffer, strlen(Buffer), 0);

    char buf[CHUNK_SIZE];
    int recv_size;
    FILE *fp = fopen("cliente_to_linux.exe", "wb");
    while((recv_size = recv(fd, buf, CHUNK_SIZE, 0)) > 0) {
        fwrite(buf, sizeof(char), recv_size, fp);
    }
    fclose(fp);

    printf("Archivo descargado con exito...\n");
    getchar();
    closesocket(fd);
    WSACleanup();

    return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义LEN_BUFF 400
#定义块大小3000
int main(){
插座fd;
WSADATA WSADATA;
结构主机*服务器;
无符号长地址=0;
客户端中的结构sockaddr_;
字符缓冲区[LEN_BUFF];
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0){
printf(“错误al-iniciar el套接字:%d”,WSAGetLastError());
getchar();
返回1;
}
client.sinu family=AF\u INET;
client.sin_addr.s_addr=INADDR\u ANY;
client.sin_port=htons(80);
服务器=gethostbyname(“185.28.21.141”);
如果(服务器==NULL){
printf(“服务器描述\n”);
getchar();
返回1;
}
memcpy((char*)&client.sinu-addr,server->h\u-addr,server->h\u-length);
if((fd=socket(AF\u INET,SOCK\u STREAM,0))==INVALID\u socket){
printf(“输入套接字错误”\n);
getchar();
返回1;
}
if(connect(fd,(struct sockaddr*)和client,sizeof(client))<0{
printf(“错误en connect()\n”);
getchar();
返回1;
}
sprintf(缓冲区,“获取%s HTTP/1.1\r\n\r\n”,“/archivo/cliente_to_linux.exe”);
发送(fd,Buffer,strlen(Buffer),0);
char buf[块大小];
内部记录大小;
文件*fp=fopen(“cliente_to_linux.exe”,“wb”);
而((recv_size=recv(fd,buf,CHUNK_size,0))>0){
fwrite(buf,sizeof(char),recv_size,fp);
}
fclose(fp);
printf(“Archivo descargado con exito…\n”);
getchar();
闭合插座(fd);
WSACleanup();
返回0;
}

我的代码有什么问题?为什么只下载1kb?

为什么您不确定1kb是否为标头?你看过文件内容了吗?可能是一条错误消息……是的,我查看了,但在前128字节左右的十六进制转储中没有显示错误。从程序编写的文件中,而不是从原始文件或通过web浏览器或任何东西。您还可以打印出
recv_size
的最后一个值,因为您可能有错误。显示无错误仅显示字节数