c-使用winsock下载文件不完整
我有一个代码可以下载我网站的.exe,但问题是只下载1kb,我不知道为什么。也许是头球,但我不确定 这是我的代码: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
#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
的最后一个值,因为您可能有错误。显示无错误仅显示字节数