Cериализация данных C++

111
06 декабря 2019, 22:10

код сервера

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <unistd.h>
#include <arpa/inet.h>
using namespace std;
int main(int argc, char *argv[])
{
  char *port;
  int port_atoi;
  char s1[] = "-p";
  int k = strcmp(s1, argv[1]);
  if (k == 0 && argc==3)
  {
    port = argv[2];
    port_atoi = atoi(port);
  }
  else
  {
    cout << "Usage : server -p [port]" << endl;
    return 1;
  }
  int sockfd = socket(AF_INET, SOCK_STREAM, 0);
  struct sockaddr_in addr;
  addr.sin_port = htons(port_atoi);
  addr.sin_family = AF_INET;
  inet_pton(AF_INET, "192.168.0.60", &(addr.sin_addr));
  if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
  {
    cout << "error : bind" << endl;
    exit(2);
  }
  int listener = listen(sockfd, 1);
  if(listener < 0)
  {
    cout<<"error : listen "<<endl;
    exit(3);
  }
  int incoming;
  int sock;
  char buf[1024];
  char hello[] = "hello client";
  while(1)
  {
    sock = accept(sockfd, NULL, NULL);
    if(sock)
    {cout<<"connection"<<endl;}
    recv(sock, buf , sizeof(buf), 0 );
    send(sock, hello, sizeof(hello), 0);
    cout << buf << endl;
    close(sock);
  }

  return 0;
}

код клиента

#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
using namespace std;
struct Client
{   
    int key;
    const char *value; 
};
int main(int argc, char *argv[])
{
    Client kli;
    kli.key = 1;
    kli.value = "Hard_Disk";
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(3000);
    inet_pton(AF_INET, "192.168.0.60", &(addr.sin_addr));
    if(connect(sockfd, (struct sockaddr*)& addr, sizeof(addr)) < 0)
    {
        cout << "error : connection" << endl;
        exit(1);
    }
    char buf[1024];
    char hello[] = "hello server";
    send(sockfd, hello, sizeof(hello), 0);
    recv(sockfd, buf, sizeof(buf), 0);
    close(sockfd);
    cout<<buf<<endl;
    return 0;
}

Как в такой ситуации лучше всего передать структуру? Нашел,что можно решить вопрос с помощью boost.asio,json,xml, но по докам так и не дошло как это делать.Больше интересует самый простой способ,чтобы понять суть т.к сам новичок.

READ ALSO
Композиция двух классов

Композиция двух классов

Тема: Композиция двух классовВложенный класс

116
Сортировка четных и нечётных чисел в массиве по возрастанию и убыванию

Сортировка четных и нечётных чисел в массиве по возрастанию и убыванию

Доброго времени суток всем! Нужно в введённом пользователем массиве отсортировать числа так, чтобы сначала шли чётные числа по возрастанию,...

126
Ввод данных с клавиатуры без нажатия Enter

Ввод данных с клавиатуры без нажатия Enter

Как можно сделать так,дабы символ в консольке считывался сразу после ввода,без нажатия Enter?Не хочу пользоваться _getch,ибо приходится подключать...

106
Как можно исправить? [закрыт]

Как можно исправить? [закрыт]

Want to improve this question? Update the question so it's on-topic for Stack Overflow на русском

122