miércoles, 24 de octubre de 2007

c _cliente/servidor_simple


-------
_cliente [MyClient.c]
-------
_______
#include
<stdio.h>
#include
<sys/types.h>
#include
<sys/socket.h>
#include
<netinet/in.h>
#include <netdb.h
>

#define PORT 3550
#define MAXDATASIZE 100

int main(int argc, char *argv[])
{
int fd, numbytes;
char buf[MAXDATASIZE];

struct hostent *he;

struct sockaddr_in server;

if (argc !=2) {
printf("Uso: %s \n",argv[0]);
exit(-1);
}

if ((he=gethostbyname(argv[1]))==NULL){
printf("gethostbyname() error\n");
exit(-1);
}

if ((fd=socket(AF_INET, SOCK_STREAM, 0))==-1){
printf("socket() error\n");
exit(-1);
}

server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(server.sin_zero),8);

if(connect(fd, (struct sockaddr *)&server,
sizeof(struct sockaddr))==-1){
printf("connect() error\n");
exit(-1);
}

if ((numbytes=recv(fd,buf,MAXDATASIZE,0)) == -1){
printf("Error en recv() \n");
exit(-1);
}

buf[numbytes]='\0';

printf("Mensaje del Servidor: %s\n",buf);
close(fd);
}
_______
-------
_servidor [MyServer.c]
-------
_______
#include <stdio.h
>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT 3550 /* El puerto que será abierto */
#define BACKLOG 2 /* El número de conexiones permitidas */

main()
{

int fd, fd2;

struct sockaddr_in server;
struct sockaddr_in client;
int sin_size;

if ((fd=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {
printf("error en socket()\n");
exit(-1);
}

server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = INADDR_ANY;
bzero(&(server.sin_zero),8);

if(bind(fd,(struct sockaddr*)&server,
sizeof(struct sockaddr))==-1) {
printf("error en bind() \n");
exit(-1);
}

if(listen(fd,BACKLOG) == -1) {
printf("error en listen()\n");
exit(-1);
}

while(1) {
sin_size=sizeof(struct sockaddr_in);
if ((fd2 = accept(fd,(struct sockaddr *)&client,
&sin_size))==-1) {
printf("error en accept()\n");
exit(-1);
}

printf("Se obtuvo una conexión desde %s\n",
inet_ntoa(client.sin_addr) );
send(fd2,"Bienvenido a mi servidor.\n",22,0);
close(fd2);
}
}
_______
-------
_ejemplo compilado con gcc versión 4.2.1:
# gcc -o MyClient MyClient.c
# gcc -o MyServer MyServer.c

_salida de ejemplo con dos terminales para WindowMaker:
-------

No hay comentarios: