Comparto dos sencillos códigos fuentes de un servidor y de un cliente. Les servirá a aquellos que empiecen a programar en C++.
Los he compilado y ejecutado. Funcionan correctamente. 


Source  server:

Código: Seleccionar todo

/*standard symbols */ #include /* sockets */ #include #include #include #include #include /* strings / errors*/ #include #include #include /* server parameters */ #define SERV_PORT 8080 /* port */ #define SERV_HOST_ADDR "127.0.0.1" /* IP, only IPV4 support */ #define BUF_SIZE 100 /* Buffer rx, tx max size */ #define BACKLOG 5 /* Max. client pending connections */ int main(int argc, char* argv) /* input arguments are not used */ { int sockfd, connfd ; /* listening socket and connection socket file descriptors */ unsigned int len; /* length of client address */ struct sockaddr_in servaddr, client; int len_rx, len_tx = 0; /* received and sent length, in bytes */ char buff_tx[BUF_SIZE] = "Hello client, I am the server"; char buff_rx[BUF_SIZE]; /* buffers for reception */ /* socket creation */ sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { fprintf(stderr, "[SERVER-error]: socket creation failed. %d: %s \n", errno, strerror( errno )); return -1; } else { printf("[SERVER]: Socket successfully created..\n"); } /* clear structure */ memset(&servaddr, 0, sizeof(servaddr)); /* assign IP, SERV_PORT, IPV4 */ servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr(SERV_HOST_ADDR); servaddr.sin_port = htons(SERV_PORT); /* Bind socket */ if ((bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr))) != 0) { fprintf(stderr, "[SERVER-error]: socket bind failed. %d: %s \n", errno, strerror( errno )); return -1; } else { printf("[SERVER]: Socket successfully binded \n"); } /* Listen */ if ((listen(sockfd, BACKLOG)) != 0) { fprintf(stderr, "[SERVER-error]: socket listen failed. %d: %s \n", errno, strerror( errno )); return -1; } else { printf("[SERVER]: Listening on SERV_PORT %d \n\n", ntohs(servaddr.sin_port) ); } len = sizeof(client); /* Accept the data from incoming sockets in a iterative way */ while(1) { connfd = accept(sockfd, (struct sockaddr *)&client, &len); if (connfd < 0) { fprintf(stderr, "[SERVER-error]: connection not accepted. %d: %s \n", errno, strerror( errno )); return -1; } else { while(1) /* read data from a client socket till it is closed */ { /* read client message, copy it into buffer */ len_rx = read(connfd, buff_rx, sizeof(buff_rx)); if(len_rx == -1) { fprintf(stderr, "[SERVER-error]: connfd cannot be read. %d: %s \n", errno, strerror( errno )); } else if(len_rx == 0) /* if length is 0 client socket closed, then exit */ { printf("[SERVER]: client socket closed \n\n"); close(connfd); break; } else { write(connfd, buff_tx, strlen(buff_tx)); printf("[SERVER]: %s \n", buff_rx); } } } } } 
Source  client:

Código: Seleccionar todo

#include #include #include #include #include #include #include #include #include #define SERVER_ADDRESS "127.0.0.1" /* server IP */ #define PORT 8080 /* Test sequences */ char buf_tx = "Hello server. I am a client"; char buf_rx[100]; /* receive buffer */ /* This clients connects, sends a text and disconnects */ int main() { int sockfd; struct sockaddr_in servaddr; /* Socket creation */ sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { printf("CLIENT: socket creation failed...\n"); return -1; } else { printf("CLIENT: Socket successfully created..\n"); } memset(&servaddr, 0, sizeof(servaddr)); /* assign IP, PORT */ servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr( SERVER_ADDRESS ); servaddr.sin_port = htons(PORT); /* try to connect the client socket to server socket */ if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) != 0) { printf("connection with the server failed...\n"); return -1; } printf("connected to the server..\n"); /* send test sequences*/ write(sockfd, buf_tx, sizeof(buf_tx)); read(sockfd, buf_rx, sizeof(buf_rx)); printf("CLIENT:Received: %s \n", buf_rx); /* close the socket */ close(sockfd); } 

Server secuencial:

El server atiende un cliente a la vez. 

Información extra:

[Enlace externo eliminado para invitados]


Fuente:

WhileTrueThenDream

 
Imagen
Imagen
Se agradece el aporte en C++ Flight embedded 👍
Me acuerdo cuando empecé a programar un RAT en C++ y la parte del server entre la interfaz gráfica (nativa), los multi hilos, etc. Se empezó a complicar la cosa.
Al final opté por el cliente en C++ y el server en Delphi 🤣
Imagen
Bl4ckV escribió: 25 Nov 2022, 20:11 Se agradece el aporte en C++ Flight embedded 👍
Me acuerdo cuando empecé a programar un RAT en C++ y la parte del server entre la interfaz gráfica (nativa), los multi hilos, etc. Se empezó a complicar la cosa.
Al final opté por el cliente en C++ y el server en Delphi 🤣
 
 
¿Compartirías el código fuente de tu proyecto de Rat? 😋  :ja:
Imagen
Imagen
Flight embedded" escribió: 26 Nov 2022, 08:38
Bl4ckV escribió: 25 Nov 2022, 20:11 Se agradece el aporte en C++ Flight embedded 👍
Me acuerdo cuando empecé a programar un RAT en C++ y la parte del server entre la interfaz gráfica (nativa), los multi hilos, etc. Se empezó a complicar la cosa.
Al final opté por el cliente en C++ y el server en Delphi 🤣
 
¿Compartirías el código fuente de tu proyecto de Rat? 😋  :ja:
 
 
Todavía me quedan unos pocos meses de desarrollo :ja:
Imagen
Bl4ckV escribió: 26 Nov 2022, 18:49
Flight embedded" escribió: 26 Nov 2022, 08:38
Bl4ckV escribió: 25 Nov 2022, 20:11 Se agradece el aporte en C++ Flight embedded 👍
Me acuerdo cuando empecé a programar un RAT en C++ y la parte del server entre la interfaz gráfica (nativa), los multi hilos, etc. Se empezó a complicar la cosa.
Al final opté por el cliente en C++ y el server en Delphi 🤣
 
¿Compartirías el código fuente de tu proyecto de Rat? 😋  :ja:
 
Todavía me quedan unos pocos meses de desarrollo :ja:
De acuerdo. Espero que puedas terminar el desarrollo código...👏
Imagen
Imagen
Responder

Volver a “Fuentes”