Отправить данные из сокета с циклом - PullRequest
0 голосов
/ 01 марта 2020

Привет, я использую сокет для отправки данных между 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);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...