Buenas a toda la familia taringuera, aca les dejo un ejemplo de como programar un socket en Linux, los codigos fuentes en C son de un chat cliente-servidor, esta es la magestuosa simplisidad de linux, lo pueden compilar con gcc o con Geany, que en mi caso fue compilado con este ultimo ya que es en entorno grafico y mas agradable, pero eso corre por cuenta de ustedes.
El que no lo tiene, puede instalarlo por consola asi:
$ sudo apt-get install geany
Codigo Cliente
/*-----------------------------------------------------------------------------------------------------------*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
int main()
{
int sockfd;
int len;
struct sockaddr_in address;
int result;
char ch = 'A';
char c[1024];
int buf;
while(c[0]!='Q'||c[1]!='U'||c[2]!='I'||c[3]!='T'||c[4]!=' ')
{
/* Crear un socket para el cliente */
sockfd = socket(AF_INET, SOCK_STREAM, 0) ;
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1" ) ;
address.sin_port = 9734;
len = sizeof(address);
result = connect(sockfd, (struct sockaddr *)&address, len) ;
if(result == -1)
{
perror("ERROR EN LA CONEXION" );
exit(1);
}
write(sockfd, &ch, 1);
read(sockfd, &ch, 1);
printf("char para el servidor = %cn", ch);
printf("Escriba SALIRn" ) ;
scanf("%s",c);
buf=strlen(c);
write(sockfd, c, buf+1);
printf("Recibi %sn",c);
close(sockfd);
}
}
/*------------------------------------------------------------------------------------------------------------*/
Codigo Servidor
/*-----------------------------------------------------------------------------------------------------------*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main()
{
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
char c[1024];
/* Crear un socket para el server */
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
/* nombre del socket */
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1" ) ;
server_address.sin_port = 9734;
server_len = sizeof(server_address) ;
bind(server_sockfd, (struct sockaddr *)&server_address, server_len) ;
listen(server_sockfd, 5);
while(c[0]!='Q'||c[1]!='U'||c[2]!='I'||c[3]!='T'||c[4]!=' ')
{
char ch;
printf("server esperando CARACTERESn" ) ;
client_sockfd = accept(server_sockfd,
(struct sockaddr *)&client_address, &client_len);
read(client_sockfd, &ch, 1);
ch++;
write(client_sockfd, &ch, 1);
read(client_sockfd, c, 1024);
printf("%sn",c);
close(client_sockfd);
}
close(server_sockfd);
}
/*-----------------------------------------------------------------------------------------------------------------*/
Espero que les guste y les sirva, por favor no se olviden de comentar, que no cuesta nada
El que no lo tiene, puede instalarlo por consola asi:
$ sudo apt-get install geany
Codigo Cliente
/*-----------------------------------------------------------------------------------------------------------*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
int main()
{
int sockfd;
int len;
struct sockaddr_in address;
int result;
char ch = 'A';
char c[1024];
int buf;
while(c[0]!='Q'||c[1]!='U'||c[2]!='I'||c[3]!='T'||c[4]!=' ')
{
/* Crear un socket para el cliente */
sockfd = socket(AF_INET, SOCK_STREAM, 0) ;
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1" ) ;
address.sin_port = 9734;
len = sizeof(address);
result = connect(sockfd, (struct sockaddr *)&address, len) ;
if(result == -1)
{
perror("ERROR EN LA CONEXION" );
exit(1);
}
write(sockfd, &ch, 1);
read(sockfd, &ch, 1);
printf("char para el servidor = %cn", ch);
printf("Escriba SALIRn" ) ;
scanf("%s",c);
buf=strlen(c);
write(sockfd, c, buf+1);
printf("Recibi %sn",c);
close(sockfd);
}
}
/*------------------------------------------------------------------------------------------------------------*/
Codigo Servidor
/*-----------------------------------------------------------------------------------------------------------*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main()
{
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
char c[1024];
/* Crear un socket para el server */
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
/* nombre del socket */
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1" ) ;
server_address.sin_port = 9734;
server_len = sizeof(server_address) ;
bind(server_sockfd, (struct sockaddr *)&server_address, server_len) ;
listen(server_sockfd, 5);
while(c[0]!='Q'||c[1]!='U'||c[2]!='I'||c[3]!='T'||c[4]!=' ')
{
char ch;
printf("server esperando CARACTERESn" ) ;
client_sockfd = accept(server_sockfd,
(struct sockaddr *)&client_address, &client_len);
read(client_sockfd, &ch, 1);
ch++;
write(client_sockfd, &ch, 1);
read(client_sockfd, c, 1024);
printf("%sn",c);
close(client_sockfd);
}
close(server_sockfd);
}
/*-----------------------------------------------------------------------------------------------------------------*/
Espero que les guste y les sirva, por favor no se olviden de comentar, que no cuesta nada