0

我目前正在开发一个线程网络应用程序(实际上是两个,但有一个共同的基础),并且正在使用 nCurses 作为接口。

问题是,目前我正在尝试启动两个线程;GUI 线程正在监听键盘的触发,当它触发时,将在内存中建立一条消息。当按下回车键时,它被传递给服务器线程,服务器线程通过网络传递它。

服务器线程侦听连接。当它收到一个时,它进入一个循环;查看连接中是否有任何数据,如果有,将其发送到 GUI 线程,然后显示它。然后,检查 GUI 中的任何内容,通过网络发送,等等。

问题是,我可以很好地接收消息(到目前为止一直在使用 Telnet 进行测试......),并且消息可以很好地到达 GUI 线程。printf 会很好地显示它(但是混合 printf 和 nCurses 感觉很脏),但是 printw 只会给我一个换行符来解决我的麻烦。当我单独访问角色时,一切似乎都奏效了。

char* messageRcv;
messageRcv = stream_rcv_nblock(stream);

if(messageRcv != NULL) {
    if(messageRcv[0] != '\xFF') {
        printw("%s", messageRcv);
        refresh();
    }

    free(messageRcv);
}

这是理论上应该显示消息的代码。作为记录,0xFF 目前正在充当“连接已关闭”代码。又快又脏,但现在还很早,所以我不在乎。

任何有关此问题的帮助将不胜感激,因为我一无所有。谢谢。

编辑: printw() 使用格式字符串“%s”,但错误仍然存​​在。

4

1 回答 1

0

最有可能的问题是您的字符串在每行的末尾都包含 CR-LF 序列。

addch(由 使用printw)被要求输出换行符时,它首先执行 a clrtoeol,然后将光标前进到下一行。由于 CR 导致光标位置重置到左边距,clrtoeolNL 的输出将擦除刚刚打印的行中的所有字符。

据我所知,除了从输出中删除 CR 之外,没有其他方法可以阻止这种行为。

于 2015-05-13T18:48:02.210 回答