【发布时间】:2023-04-03 15:03:01
【问题描述】:
我正在编写一个 TCP 服务器/客户端程序,并希望将文件从服务器发送到客户端。这是我的代码,它无法发送文件。我使用recv() 和send() 发送文件。提前致谢。
客户端:
char *location = "/home/kostas/Downloads/download.txt";
FILE *download = fopen( location, "w+" );
if( download == NULL )
{
printf( "Error\n" );
fflush( stdout );
}
int transfer = 0;
memset( buffer, 0, 1024 );
while( ( transfer = recv( connFd, buffer, 1024 , 0 ) > 0 ) )
{
int write = fwrite( buffer, sizeof( char ), transfer, download );
memset( buffer, 0, 1024 );
if( ( transfer == 0 ) || ( transfer != 1024 ) )
{
break;
}
}
memset( buffer, 0, 1024 );
if( read( connFd, buffer, sizeof( buffer ) ) < 0 )
{
printf( "Read error\n" );
fflush( stdout );
}
服务器端:
//i get the filename by read/write
FILE *file = fopen( fileName, "r");
memset( buffer, 0, 1024 );
int i = 0;
while( ( i = fread( buffer, sizeof( char ), 1024, file ) ) < 0 )
{
if( send( connFd, buffer, i, 0 ) < 0 )
{
printf( "Error\n" );
fflush( stdout );
}
memset( buffer, 0, 1024 );
}
我不知道我做错了什么?之后我打算使用posix线程来实现文件传输。
【问题讨论】:
-
再次检查接收
while循环,你放错了一些括号。实际上,服务器中的读取循环也有同样的问题。您可能想检查例如this operator precedence table. -
不要告诉我 i = fread...
-
我确实改了,但还是不行:/
-
那么,客户端连接成功了吗?服务器 accept() 是否返回?您是否进行过任何调试?
-
是的,客户端连接成功并且接受返回。是的,我做了调试。我还更正了 while 循环中的括号。但仍然...
标签: c tcp client-server