【问题标题】:C++ Sockets,Multithreading and output handlingC++ 套接字、多线程和输出处理
【发布时间】:2015-07-09 01:21:16
【问题描述】:

我想做一个聊天系统。它应该写你:然后你输入的任何内容,每当你从其他用户那里收到文本时,只需删除你:输入用户:消息和你:再次。

服务器:

        std::cin.ignore();
        std::thread t1(readData,&acceptedSocket);
        do{
            memset(buffer,0,sizeof(buffer));
            std::cout << "You: ";
            std::cin.getline(buffer,255);
            n = send(acceptedSocket,buffer,strlen(buffer),0);
        }while(n > 0);

客户:

    std::cin.ignore();
    std::thread t1(readData,&connectingSocket);
    do{
        memset(buffer,0,sizeof(buffer));
        std::cout << "You: ";
        std::cin.getline(buffer,255);
        n = send(connectingSocket,buffer,strlen(buffer),0);
    }while(n > 0);

读取数据:

void readData(int *socketPointer){
    int connectingSocket = *socketPointer;
    char buffer[256];
    memset(buffer,0,sizeof(buffer));
    while(recv(connectingSocket,buffer,255,0)){
        std::cout << "\b\b\b\b\bUSER:" << buffer << std::endl << "You: ";
        memset(buffer,0,sizeof(buffer));
    }
}

输出:

服务器:

USER:Hello
USER:How are u doing
Hi
You: You: I am fine
USER:gg
wp
You: You:

客户:

You: Hello
You: How are u doing
USER:Hi
USER:I am fine
gg
You: USER:wp

想要的服务器输出:

USER:Hello
USER:How are u doing
You: Hi
You: I am fine
USER:gg
You: wp
You: 

想要的客户端输出:

You: Hello
You: How are u doing
USER:Hi
USER:I am fine
You: gg
USER:wp
You:

其他线程有cin换行时好像不能换行,谢谢!

【问题讨论】:

  • c++ iostreams 仅用于简单的输入/输出操作。如果您想对输出进行更复杂的操作,您应该考虑使用像 ncurses 这样的库。

标签: c++ multithreading sockets output cout


【解决方案1】:

我找到了答案! 我注意到当两个线程正在运行时 - 一个正在从 cin 流中获取行,另一个正在输出文本,您需要刷新 cout 缓冲区,因此只有在 std::endl 之后才出现文本,它会刷新缓冲区并放入新的同时行,所以:

std::cout.flush():

修复了问题:

    std::cout << "\b\b\b\b\bUSER:" << buffer << std::endl << "You: ";
    std::cout.flush();

【讨论】:

    猜你喜欢
    • 2016-03-16
    • 2012-09-07
    • 2013-07-03
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多