如何在C网络中组织接收消息和用户当前输入,使其干净

问题描述 投票:0回答:1

程序有两个线程,一个处理send,一个处理recv。将始终提示用户输入要发送的消息。同时,recv线程将显示发送给用户的消息。 当用户在撰写消息的过程中收到消息时,事情会变得混乱,如下所示:

>>I'm composing a me<new message>ssage

我认为这个问题的根源在于输入和输出位于同一窗口。 有什么方法可以使其更清晰,以便将新消息与用户当前的输入分开?

我当前的接收和发送代码已成功

void* talk(void* sockfd){
    char msg[MSG_LEN_LIMIT];

    while(1){
        //printf("me: ");
        fgets(msg, MSG_LEN_LIMIT, stdin);
        msg[strcspn(msg, "\n")] = 0;
        send(*((int*)sockfd), msg, MSG_LEN_LIMIT, 0);
        //printf("me: %s\n", msg);
    }
    return NULL;
}

void* listento(void *sockfd){
    int byteReceived;
    char msg[MSG_LEN_LIMIT];

    while(1){
        if((byteReceived = recv(*((int*)sockfd), msg, MSG_LEN_LIMIT, 0) )== -1){
            perror("recv");
            continue;
        }else if(byteReceived == 0){
            fprintf(stderr, "connection lost");
            exit(1);
        }
        //msg[byteReceived] = '\0';
        printf("otherside: %s\n", msg);
    }
}
c network-programming terminal printf
1个回答
0
投票

输入和输出位于同一个终端窗口上绝对是问题的根源,这样做肯定会遇到 I/O 流冲突。我会考虑使用 ncurses 将终端视图分成两个窗口,可能是底部的输入窗口和顶部的输出窗口,该选择由您决定:P

© www.soinside.com 2019 - 2024. All rights reserved.