C++套接字,客户端无法向java服务器发送消息

标签 c++ linux network-programming

我正在尝试让两个套接字(一个用于发送,另一个用于接收)工作。

现在我可以接收但无法发送。服务器是用java编写的,我正在尝试与用c++编写的客户端连接。

这是客户端部分,我正在打开一个套接字以在 if 语句中发送,如果表达式为 false,我想发送一条消息,但它不起作用。

if (function == "connect_to_server" ){
    status_s = getaddrinfo(&host_const[0], &port_const[0], &host_info_s, &host_info_list_s);

    if (status_s != 0)  std::cout << "getaddrinfo error" << gai_strerror(status_s) ;


    std::cout << "Creating a sending socket..."  << std::endl;
    socketfd_s = socket(host_info_list->ai_family, host_info_list->ai_socktype,
                      host_info_list->ai_protocol);
    if (socketfd_s == -1)  std::cout << "socket error " ;

    std::cout << "Host: " << &host_const[0] << std::endl;
    std::cout << "Port: " << &port_const[0] << std::endl;
    std::cout << "function: " << function << std::endl;
    function.erase(std::remove(function.begin(), function.end(), '\n'), function.end());

    std::cout << "Connect()ing..."  << std::endl;
    status_s = connect(socketfd_s, host_info_list_s->ai_addr, host_info_list_s->ai_addrlen);
    if (status_s == -1)  std::cout << "connect error" ;
    cout << "socket : " << socketfd_s ;


    std::cout << "'Client connected....."  << std::endl;
   }
   else 
        std::cout << "send()ing total  message on anwser..."  << std::endl;
        char *msg_s = "some_string";
        int len_s;
        ssize_t bytes_sent_s;
        std::cout << msg_s;
        len_s = strlen(msg_s);
        std::cout << len_s << std::endl;
        std::cout << "Message not sent...."  << std::endl;
        bytes_sent_s = send(socketfd_s, msg_s, len_s, 0);
        //send(socketfd_s, msg_s, len_s, 0);
        std::cout << "Message sent....\n"  << std::endl;
        std::cin.ignore();
        cout << "param1" << socketfd_s;
        cout << "param2" << len_s;
        cout << "param3" << msg_s;
        }

与服务器的连接已建立,但字符串未发送到服务器。 啊,整个过程运行一段时间 (1){},以便能够接收多于一条消息。

编辑:我忘了提及,启动客户端后不会发送任何内容,但是如果我用 ctrl - c 终止它,消息就会发送到服务器。

提前谢谢,

梅尔

最佳答案

请记住,Java 中的字符是两个字节,而不是像 C 中的 1。您应该尝试 std::wstring。

另一个想法:使用字符串的长度加 1(在本例中为 2),在字符串末尾添加 0(或两个零字节)。了解服务器期望什么会很有用。

关于C++套接字,客户端无法向java服务器发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28368163/

相关文章:

c - valgrind 中大小为 1 的无效写入/读取,未找到答案

linux - 为什么我的 IP 地址总是以 hosts.deny 文件结尾?

c - 关于使用 Sockets API 的基于 TCP 的简单回显服务器

当前网络流量的android事件?

c++ - 使 std::vector 分配对齐的内存

linux - 意外的 EOF cronjob 错误

c++ - 链表析构函数 (C++)

c - c中定义的const SOMAXCONN在哪里?

c++ - std::async 导致死锁?

c++ - 什么是替代字符以及如何在Windows中处理它