Привет, я использую сокет для отправки данных между java и c ++. Я могу отправлять данные из java в l oop без проблем, но в l oop, который отправляет данные из c ++ в java iam, получая только первый массаж, такой как массаж, который я посылаю во втором массаже, или все другие виды массажа не совпадают с тем, что я посылаю. они выглядят как «dCdwdx», но я посылаю, например, «привет», в чем ошибка в мой код?
Это мой код C ++:
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <strings.h>
#include <unistd.h>
#include <iostream>
int sockfd; // socket file descriptor
int portno; // port number
struct sockaddr_in serv_addr;
struct hostent *server;
char rbuff[256];
int rbytes;
int choose;
std::string massage;
int main(){
sockfd = socket(AF_INET, SOCK_STREAM, 0); // generate file descriptor
if (sockfd < 0)
perror("ERROR opening socket");
server = gethostbyname("127.0.0.1"); //the ip address (or server name) of the listening server.
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);
serv_addr.sin_port = htons(4447);
while (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0){
puts("Waiting for connection\n");
sleep(5);
}
puts("connected");
std::cout << "Enter '1' for send to java \n Enter '2' for retrieve from java\n";
std::cin >> choose;
if (choose == 1){
int wbytes;
char * wbuff;
while (true){
std::cin >> (massage);
wbuff = (char *)massage.c_str();
wbytes = write(sockfd, wbuff, strlen(wbuff));
wbytes = write(sockfd, "\n", strlen(wbuff));
if(wbytes < 0) perror("Cannot write to socket");
}
}else if (choose == 2){
rbytes = recv(sockfd, rbuff, sizeof(rbuff), 0); // similar to read(), but return -1 if socket closed
rbuff[rbytes] = '\0'; // set null terminal
printf("Message: %s\n", rbuff);
}
}