一个socket为命令端,另一个socket为数据端,如何通知数据端接受结束?

写了一个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那边发送来结束命令时,返回数据

阅读 1.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题