Skip to content

Instantly share code, notes, and snippets.

@carlosmgv02
Last active February 20, 2023 20:58
Show Gist options
  • Save carlosmgv02/b167b3372651694355a572ec0d941927 to your computer and use it in GitHub Desktop.
Save carlosmgv02/b167b3372651694355a572ec0d941927 to your computer and use it in GitHub Desktop.
Socket program in c.

XDPrac1

Socket example developed in C, it creates a client and a server, and sends files in between.

FILES

  • client.c
    • client
  • servidor.c
    • servidor

EXECUTION

To execute the program, run the following commands in two different Linux consoles:

./client IP

(Replace "IP" with the commputer's IP you want to try it with.)

./servidor
/* Codi solucio de la practica: CLIENT */
/* Inclusio de fitxers .h habituals */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Inclusio de fitxers .h per als sockets */
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define MIDA_BUFFER 1024
int main(int argc, char **argv){
if (argc != 2) {
printf("Us: %s IP\n", argv[0]);
exit(0);
}
int s; /* Per treballar amb el socket */
struct sockaddr_in adr;
char buffer[MIDA_BUFFER];
socklen_t mida;
int i;
int n1, n2;
int res;
printf("Introdueix el primer nombre:");
scanf("%d", &n1);
printf("Introdueix el segon nombre:");
scanf("%d", &n2);
sprintf(buffer,"%d %d", n1,n2);
if (n1<0 || n1>99)
{
printf ("error en n1");
exit(-1);
}
if (n2<0 || n2>99)
{
printf ("error en n2");
exit (-1);
}
/* Volem socket d'internet i no orientat a la connexio */
s = socket(AF_INET, SOCK_DGRAM, 0);
adr.sin_family = AF_INET;
adr.sin_port = htons(44444);
/* L'adreca de comunicacio sera la IP del servidor, es a dir el parametre */
adr.sin_addr.s_addr = inet_addr(argv[1]);
/* Generem el paquet i l'enviem */
sendto(s, buffer, MIDA_BUFFER, 0, (struct sockaddr*)&adr, sizeof(adr));
printf("Paquet enviat!\n");
/* Rebem el paquet*/
recvfrom(s, buffer, MIDA_BUFFER, 0, (struct sockaddr*)&adr,&mida);
sscanf(buffer,"%d",&res);
printf("El resultat de la multiplicació es: %d\n",res);
/* Tanquem el socket */
close(s);
return 0;
}
/* Codi solucio de la practica: SERVIDOR */
/* Inclusio de fitxers .h habituals */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Inclusio de fitxers .h per als sockets */
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define MIDA_BUFFER 1024
int main(char *a){
int s; /* Per treballar amb el socket */
struct sockaddr_in serv_adr, client_adr;
char buffer[MIDA_BUFFER];
socklen_t mida;
int n;
/* Volem socket d'internet i no orientat a la connexio */
s = socket(AF_INET, SOCK_DGRAM,0);
/* Posem les dades del socket */
serv_adr.sin_family = AF_INET;
serv_adr.sin_addr.s_addr = INADDR_ANY;
serv_adr.sin_port = htons(44444);
/* Enllacem el socket */
n = bind(s, (struct sockaddr*)&serv_adr, sizeof(serv_adr));
if (n < 0)
{
printf("No s'ha pogut enllacar el socket\n");
}
else
{
/* Servidor operatiu! */
printf("SERVIDOR OPERATIU!\n");
while (1) /*Fem un bucle infinit per estar escoltant sempre*/
{
recvfrom(s, buffer, MIDA_BUFFER, 0, (struct sockaddr*)&client_adr, &mida);
printf("Paquet rebut!\n");
int n1, n2;
sscanf(buffer,"%d %d",&n1,&n2);
int resultat;
resultat = n1 * n2;
printf("%d x %d = %d\n",n1,n2,resultat);
sprintf(buffer, "%d",resultat);
printf("Resultat enviat al client\n");
sendto(s, buffer, MIDA_BUFFER, 0, (struct sockaddr*)&client_adr, sizeof(client_adr));
printf("************************\n");
printf("Esperant nova petició\n\n");
}
}
/* Tanquem el socket */
close(s);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment