写了一个FTP的client,使用被动模式,建立好用来传输的data socket后,用于命令的socket如何通知data socket?
// 被动模式
int client_data_socket = get_client_data_socket(client_cmd_port);
sprintf(send_buffer, "PASV\r\n");
send_cmd(client_socket, send_buffer);
// 227
length = get_respond(client_socket, recv_buffer, argv[1]);
if (!is_correct_respond(recv_buffer, 227))
{
printf("enter passive mode failed\n");
continue;
}
unsigned int server_data_port = cal_data_port(recv_buffer); // 计算数据端口
connect_server(client_data_socket, argv[1], server_data_port);
sprintf(send_buffer, "LIST %s\r\n", "");
send_cmd(client_socket, send_buffer);
// 125开始传输 226表明完成
length = get_respond(client_socket, recv_buffer, argv[1]);
if (!is_correct_respond(recv_buffer, 125))
{
printf("LIST start failed\n");
continue;
}
// ...
我的想法:
client_socket(用于接受命令的socket)直接用get_respond就好了,阻塞在那里,等到接受到226命令,而client_data_socket应该要开个进程或者线程吧,client_data_socket应该也要改成非阻塞(不然就读不到数据,就阻塞了),当client_socket那边发送来结束命令时,返回数据