c++ - 如何阅读我的套接字消息

标签 c++ algorithm sockets sendmessage

我正在从 C 中的套接字读取可变字节消息。但是当任何消息中的某个字节为\0 时就会出现问题。它分为两部分,只发送前半部分。客户端也有接收问题。

请建议我可以使用的任何格式。

我有一个解决方案是先发送消息的大小,然后再发送消息的其余部分。这将解决问题,但处理变得复杂。

我正在寻找其他更清洁的解决方案吗?

/**
    Send data to the connected host
 */
bool send_data(const char* data) {
    //Send some data
    if (sendto(sock, data, strlen(data), 0,
            (const struct sockaddr *) &server, length) < 0) {
        perror("Send failed ");
        return false;
    }
    std::cout << "Data sent: length=" << strlen(data) << " \n";

    char str[INET_ADDRSTRLEN];
    inet_ntop(AF_INET, &(server.sin_addr), str, INET_ADDRSTRLEN);

    std::cerr << "server.sin_addr=" << str << std::endl;

    return true;
}

/**
    Receive data from the connected host
 */
void receive(char * buffer, size_t size) {

    //Receive a reply from the server
    if (recvfrom(sock, buffer, size, 0, (struct sockaddr *) &from, (socklen_t*) & length) < 0) {
        puts("recv failed");
    }

    char str[INET_ADDRSTRLEN];
    inet_ntop(AF_INET, &(from.sin_addr), str, INET_ADDRSTRLEN);

    std::cerr << "from.sin_addr=" << str << std::endl;

}

我发送的数据只是转换为 char * 的整数。好吧,有些整数很小,所以高位字节大多是 00000000。因此我的问题。

最佳答案

我假设您可以访问服务器和客户端代码。

您说您知道消息的大小,因此您可以在发送之前准备消息,查找任何 \0 字符并将其替换为 unique您可以在客户端识别的字节序列,将其替换为原始字符。

关于c++ - 如何阅读我的套接字消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40525261/

相关文章:

c++ - 如何为 IAsyncOperation 指定回调方法

java - 代币兑换算法

algorithm - 如何从数学上推导此递归树的叶子高度和数量

c - 将文件从网站发送到 C 应用程序

c++ - 记录标准输入和标准输出

c++ - 用VS2008编译的C++应用程序在其他电脑上运行不起来

c++ - 为什么 std::vector<>::const_reference 可以转换为非常量指针?

arrays - 软件测试--正交表测试算法

c - 当套接字上可以进行 I/O 时通知线程

java - 如何使用IP和端口直接与外部客户端通信