Re: [Programación] pasaje de mensajes a un socket
Horacio Castellini
horacio9573 en yahoo.com.ar
Sab Mar 1 15:44:25 ARDT 2008
>
> Ahora mi pregunta los descriptores de archivos deben
> ser iguales o !=.
Nop...
Si querés jugar acá te dejo un código probado un
sistema servidor de números aleatorios... y es
perfectamente portable a IPv6... En base esto es facil
desarrollar un cliente...
----------------------------------
Server..
/*
* Servidor de numeros aleatorios
* usa el puerto 2010
* soporta hasta 5 clientes
* devuelve una variable entera
* entre -INT_MAX, INT_MAX
*/
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define PUERTO 2010
#define CLIENTES 5
/*------------------------------------------------------*/
int main()
{
int pid,s1,s2,d1;
int Buf1;
FILE *flujo;
struct sockaddr_in servidor;
pid=fork();
if(pid<0){
perror("No se gener\'o hijo\n");
exit(1);
}
if(pid!=0){
printf("Demonio creado\n");
printf("su pid= %d\n",pid);
exit(0);
}
servidor.sin_family=AF_INET;
servidor.sin_port=htons(PUERTO);
servidor.sin_addr.s_addr=inet_addr("192.168.1.4");
s1=socket(AF_INET,SOCK_STREAM,0);
if (s1<0) {
perror("Soquete no creado\n");
exit(1);
}
d1=bind(s1,(struct sockaddr
*)&servidor,sizeof(servidor));
if(d1<0){
perror("No puedo enganchar\n");
exit(1);
}
while(1){
listen(s1,CLIENTES);
d1=sizeof(servidor);
s2=accept(s1,INADDR_ANY,&d1);
if(s2<0){
perror("Error al aceptar\n");
exit(1);
}
flujo=fdopen(s2,"w");
if(flujo==NULL){
perror("Flujo no creado\n");
exit(1);
}
d1=open("/dev/urandom",O_RDONLY);
if(d1<0){
perror("No leo\n");
exit(1);
}
read(d1,&Buf1,sizeof(int));
close(d1);
fprintf(flujo,"%d",Buf1);
fclose(flujo);
close(s2);
}
close(s1);
return 0;
}
Los referentes más importantes en compra/ venta de autos se juntaron:
Demotores y Yahoo!
Ahora comprar o vender tu auto es más fácil. Vistá ar.autos.yahoo.com/
Más información sobre la lista de distribución Programacion