C++ 套接字 - 使用新行发送消息 (linux)

标签 c++ linux sockets

我正在尝试从客户端向服务器发送消息,反之亦然。消息接收正确,但我必须在每条消息的末尾放置一个 *

我使用的控制循环是*buffer != '*'。我尝试用 \n 替换或通过 static_cast 为 10 的 ASCII 值进行检查,但消息没有发送。

如何在用户输入新行 (\n) 时传输消息。我正在考虑 cin.getline。可以用指针使用它吗?

服务器.cpp

     do {
            recv(server, buffer, bufsize, 0);
            cout << buffer << " ";
            if (*buffer == '#') {
                *buffer = '*';
                isExit = true;
            }
        } while (*buffer != '*');

        do {
            cout << "\nServer: ";
            do {
                cin >> buffer;
                send(server, buffer, bufsize, 0);
                if (*buffer == '#') {
                    send(server, buffer, bufsize, 0);
                    *buffer = '*';
                    isExit = true;
                }
            } while (*buffer != '*');

            cout << "Client: ";
            do {
                recv(server, buffer, bufsize, 0);
                cout << buffer << " ";
                if (*buffer == '#') {
                    *buffer == '*';
                    isExit = true;
                }
            } while (*buffer != '*');
        } while (!isExit);

客户端.cpp

     do {
        cout << "Client: ";
        do {
            cin >> buffer;
            send(client, buffer, bufsize, 0);
            if (*buffer == '#') {
                send(client, buffer, bufsize, 0);
                *buffer = '*';
                isExit = true;
            }
        } while (*buffer != 42);

        cout << "Server: ";
        do {
            recv(client, buffer, bufsize, 0);
            cout << buffer << " ";
            if (*buffer == '#') {
                *buffer = '*';
                isExit = true;
            }

        } while (*buffer != 42);

谢谢!

最佳答案

您只是在检查缓冲区的第一个字符。您需要一次读取一个字节(糟糕)或扫描整个缓冲区以查找分隔符。

请注意,它可能在中间,在另一条消息的部分或全部之前。

关于C++ 套接字 - 使用新行发送消息 (linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31442163/

相关文章:

regex - 在 Unix 命令/脚本中查找该行的前 4 个字符应为 "ORA-",接下来的 5 个字符应为数字

linux - 在 linux 中比较 2 个数字时预期输出不会出现

c# - 在 C++ 或 C# 中的 DirectX 中捕获快速游戏屏幕

c++ - LeapMotion、Qt 和信号

linux - exec 命令被卡住

swift - 如何在 Swift 中处理 CFSocketCallBackType.dataCallback?

c++ - 测试 TCP 套接字服务器?

具有多个客户端的客户端/服务器架构

c++ - C++类中非原始静态数据类型的初始化

c++ - 从成员函数指针获取方法的返回类型