我正在尝试使用两个插槽(一个用于发送,另一个用于接收)工作。
现在我可以收到,但我不能发送。服务器是用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
答案 0 :(得分:0)
请记住,Java中的字符是两个字节而不是像C中的那样。您应该尝试使用std :: wstring。
另一个想法:使用字符串PLUS 1的长度(在本例中为2),在字符串的末尾添加0(或两个零字节)。了解服务器期望的内容会很有用。
答案 1 :(得分:0)
我刚刚在另一个论坛的某个人的帮助下解决了这个问题,问题是我没有发送线路终结器。
当然,上面的马丁·詹姆斯评论也有所帮助。