2015-02-06 130 views
-1

我想獲得一個兩個套接字(一個用於發送,另一個用於接收)工作。C++套接字,客戶端無法發送消息到java服務器

現在我可以收到但我不能發送。服務器是用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將其消息發送到服務器。

THX提前,

MERL

+0

你確定這是客戶端而不是服務器的問題嗎? 'send'調用返回什麼?這個例外實際上說了什麼?什麼樣的插座?哦,那個代碼是*不是* C,它是C++,請適當地編輯你的標籤。 – 2015-02-06 14:43:26

+0

異常說明類似於行尾。我很確定它在客戶端,因爲它有一個不同的客戶端。 – Merl 2015-02-06 14:45:18

+4

服務器期待什麼?你只是發送'一些字符串',沒有換行符或空終止符。 – 2015-02-06 14:46:54

回答

0

請記住,在Java的字符是兩個字節不是1像C.你應該嘗試的std :: wstring的。

另一個想法:使用字符串PLUS 1(在本例中爲2)的長度,在字符串的末尾添加0(或兩個零字節)。瞭解服務器的期望會很有用。

+0

謝謝,但我發現問題是我發送後關閉了套接字。但現在我的問題是,它甚至不發送.... – Merl 2015-02-06 21:04:19

0

我剛剛在一個來自不同論壇的人的幫助下修復了它,問題是我沒有發送行終止符。

當然馬丁詹姆斯評論以上也有幫助。

+0

做了我的評論'服務器期待什麼?你只是發送'一些字符串',沒有換行符或空終止符。' - 沒有幫助,然後呢? – 2015-02-09 09:27:19

+0

是的,但我無法投票評論你的評論,因爲我需要15的聲望。 – Merl 2015-02-18 21:08:12

相關問題