gpt4 book ai didi

C 客户端-代理-服务器文件传输仅发送文件的一部分

转载 作者:行者123 更新时间:2023-11-30 18:11:20 25 4
gpt4 key购买 nike

我正在开发一个通过代理发送文件的应用程序,但它仅适用于文本文件(如 .txt、.c 等...),但仅复制其中的一部分。我也尝试过发送图片,但也不起作用。我正在尝试通过 512 字节缓冲区发送文件。

有人可以告诉我缺少什么吗?还有谁能告诉我socksv5代理与普通的手工用户名/密码身份验证有什么不同?

这是我发送文件时的客户端代码

FILE *in = safe_fopen(in_filename, "r", 1);

bzero(message,DEFAULT_BUFLEN);
int fs_block;
while((fs_block = fread(message, sizeof(char), DEFAULT_BUFLEN, in)) > 0){
if(send(sock,message,fs_block,0)<0){
printf("ERROR: Failed to send file %s. \n",in_filename);
return 1;
}
bzero(message,DEFAULT_BUFLEN);
}
printf("OK FILE %s from client was sent! \n",in_filename);

这是将其转发到服务器的代理

recv_msg(client_sock,message);

make_server2(&server2);
make_socket(&sock);

if(make_connection(sock,server2)==1){
return 0;
}
send_fun(sock,message);

这是接收文件的服务器部分

FILE *out = safe_fopen(out_filename, "a" , 1);

bzero(message,DEFAULT_BUFLEN);
int fr_block = 0;

while(fr_block = recv(client_sock,message,DEFAULT_BUFLEN,0)){
if(fr_block < 0){
error("Error receiving file from client to server.\n");
}
int write_sz = fwrite(message,sizeof(char),fr_block,out);
if(write_sz < fr_block){
error("File write failed on server.\n");
}
else if(fr_block){
return 1;
}
bzero(message,DEFAULT_BUFLEN);
}
printf("OK received from proxy_server! \n");

最佳答案

else if (fr_block)
return 1:

问题就出在这里。在正常情况下,fr_block 将是读取的字节数,即正数,因此此代码将导致复制循环在第一次成功迭代后退出。消除。 fs_block的类似测试也是如此。

您的错误处理也不正确:如果出现错误,您不应继续复制循环的主体。最好在 while ((fr_block = recv(...)) > 0)while ((fs_block = fread(...)) > 0) 上循环。 code> 分别,并在循环后检查错误。例如:

while((fr_block = recv(client_sock,message,DEFAULT_BUFLEN,0)) > 0){
int write_sz = fwrite(message,sizeof(char),fr_block,out);
if(write_sz < fr_block){
perror("File write failed on server.\n");
break;
}
}
if(fr_block < 0){
perror("Error receiving file from client to server.\n");
} else

对于仅适用于文本文件,您应该以 "rb""wb" 模式打开。

注意 bzero() 调用是不必要的。

关于C 客户端-代理-服务器文件传输仅发送文件的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48142492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com