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

时间:2015-02-06 14:38:14

标签: 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将其删除,则会将消息发送到服务器。

提前,

MERL

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我刚刚在另一个论坛的某个人的帮助下解决了这个问题,问题是我没有发送线路终结器。

当然,上面的马丁·詹姆斯评论也有所帮助。