这段代码有什么问题(C - Linux)?
我想从服务器接收一个文件,只要有一个字节,我就立即发送这个字节。但它不起作用。这很重要。
int Recv_File(int server,int client,char *buffer_ricezione,size_t dimensione_file){
ssize_t nwritten,nread;
size_t n;
char c;
for (n=1; n<dimensione_file; n++) {
nread = recv(server,&c,1,0);
if (nread == 1) {
nwritten = send(client,&c,1,0);
}else{
return -1; // chiudo connessione con il client
}
}
return 1;
}
由于
答案 0 :(得分:0)
可能n
应该以0开头
for (n=0; n<dimensione_file; n++) {
nread = recv(server,&c,1,0);
if (nread == 1) {
nwritten = send(client,&c,1,0);
}else{
return -1; // chiudo connessione con il client
}
}
答案 1 :(得分:0)
你可以这样试试,buffer_ricezione也将填充传输的数据。 读取一个字节并一次发送一个字节并不好,浪费了大量资源。 您的代码不会在接收缓冲区中放置任何东西,而这些缓冲区会保留传输的数据。
int Recv_File(int server,int client,char *buffer_ricezione,size_t dimensione_file){
// This code assumes that buffer_recezione has been allocated at least dimensione_file
ssize_t nwritten,nread;
size_t n;
// char c;
size_t bLeft=dimensione_file;
while (bLeft > 0)
{
nread = recv(server, buffer_ricezione, bLeft, 0);
if (nread > 0) {
if ((nwritten = send(client, buffer_ricezione, nread, 0)) != nread)
{
return -1; // impossible to send to the socket, quit
}
bLeft -=nread;
buffer_ricezione += nread;
}else{
return -1; // chiudo connessione con il client
}
}
return 1;
}