我想獲得一個兩個套接字(一個用於發送,另一個用於接收)工作。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
你確定這是客戶端而不是服務器的問題嗎? 'send'調用返回什麼?這個例外實際上說了什麼?什麼樣的插座?哦,那個代碼是*不是* C,它是C++,請適當地編輯你的標籤。 – 2015-02-06 14:43:26
異常說明類似於行尾。我很確定它在客戶端,因爲它有一個不同的客戶端。 – Merl 2015-02-06 14:45:18
服務器期待什麼?你只是發送'一些字符串',沒有換行符或空終止符。 – 2015-02-06 14:46:54