【问题标题】:C++ socket, client can't send message to java serverC ++套接字,客户端无法向Java服务器发送消息
【发布时间】:2015-02-06 14:38:13
【问题描述】:

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

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

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

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 杀死它,消息就会发送到服务器。

提前谢谢,

梅尔

【问题讨论】:

  • 你确定这是客户端的问题而不是服务器的问题吗? send 调用返回什么?异常实际上说明了什么?什么样的插座?哦,那个代码不是 C,它是C++,请适当地编辑你的标签。
  • 异常表示类似于 end of line 。我很确定它在客户端,因为它适用于不同的客户端。
  • 服务器期待什么?您只是发送“一些字符串”,没有换行符或空终止符。
  • 我刚刚发现问题出在哪里,发送后我正在关闭套接字,但服务器希望套接字保持活动状态。
  • 老实说,我也想看看 Java 代码。可能会有所帮助。

标签: c++ linux network-programming


【解决方案1】:

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

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

【讨论】:

  • 谢谢,但我发现问题是我在发送后关闭了套接字。但现在我的问题是它甚至不再发送了......
【解决方案2】:

我刚刚在其他论坛的人的帮助下修复了它,问题是我没有发送行终止符。

当然,上面的 Martin James 评论也有帮助。

【讨论】:

  • 我的评论“服务器期待什么?您只是发送“一些字符串”,没有换行符或空终止符。 - 没有帮助,那么?
  • 是的,确实如此,但我不能投票赞成你的评论,因为我需要 15 的声誉。
猜你喜欢
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2013-04-01
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多