@Billy_Milligan

Как передать по TCP несколько переменных?

Как передать по TCP несколько переменных?

Передать/принять массив или структуру проблем нет.
Не знаю как можно передать/принять например за раз int, int, string и struct? Возможно ли это вообще?
В интернете не смог ничего найти.

/*client*/
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;
    char buffer[15] = "hello world!";

    if (argc < 3) {
       fprintf(stderr,"usage %s hostname port\n", argv[0]);
       exit(0);
    }
    
    portno = atoi(argv[2]);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    
    if (sockfd < 0) {
        error("ERROR opening socket");
    }
    
    server = gethostbyname(argv[1]);
    
    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(portno);
    
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) {
        error("ERROR connecting");
    }
    
    n = write(sockfd,buffer,strlen(buffer));
    
    if (n < 0) {
         error("ERROR writing to socket");
    }
    
    bzero(buffer,256);
    n = read(sockfd,buffer,255);
    
    if (n < 0) {
         error("ERROR reading from socket");
    }
    
    printf("%s\n", buffer);
    close(sockfd);


PS: пишу под linux.
  • Вопрос задан
  • 1438 просмотров
Решения вопроса 2
@vilgeforce
Раздолбай и программист
В чем проблема поместить их в структуру и передать ее, раз вы знаете как это делать?
Ответ написан
Nipheris
@Nipheris Куратор тега C++
Вам нужно делать write для каждой переменной или буфера, который вы хотите передать. Например, что мешает сделать так:
int len = strlen(str);
double val = 6.0;
write(sockfd, &len, sizeof(len)); // длина
write(sockfd, str, len); // строка
write(sockfd, &val, sizeof(val)); // еще какой-то там дабл

Также нужно прочитать на другом конце. Что из этого не получается?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Teivaz
@Teivaz
Может и оверкилл, но для себя я использую формулу google protocolbuffer + boost asio = нет проблем с пересылкой структур. Только нужно идентифицировать пакеты.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы