程序有两个线程,一个处理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);
}
}
输入和输出位于同一个终端窗口上绝对是问题的根源,这样做肯定会遇到 I/O 流冲突。我会考虑使用 ncurses 将终端视图分成两个窗口,可能是底部的输入窗口和顶部的输出窗口,该选择由您决定:P