Programación de dispositivos de salida
(1) Cree un socket a través de la función socket().
(2) Vincule el socket a la dirección del dispositivo a través de la función de vinculación.
(3)leer/recv/recvfromwrite/enviar/enviar a.
(4) El método close cierra el socket.
Los ejemplos son los siguientes:
test1.c
#Contiene? & ltstdio.h & gt
¿#Contiene? & ltstdlib.h & gt
#¿Incluir? & ltunistd.h & gt
#¿Incluir? & ltnetinet/in . h & gt;
#¿Contiene? <arpa/inet .h >
int? Principal (no válido)
{
//¿Crear? toma (de alimentación)
int? ¿fd? =?socket(AF_INET,?SOCK_DGRAM,?0);
if(fd==-1)
{
error(" socket \ n "
Salir (-1);
}
printf("socket? fd=%d\n ", FD);
}
p>
//¿Construir? ¿conectar? Dirección
estructura? sockaddr_in? addr
addr.sin_familia? =?AF_INET
addr.sin_port? =?htons(6666);
addr.sin_addr.s_addr? =?inet _ addr(" 127 . 0 . 0 . 1 ");
int? r;
r? =?bind(fd, (struct? sockaddr *)& addr, sizeof(addr));
if(r==-1)
{
error(" enlazar ");
Cerrar (FD);
Salir (-1);
}
printf( "¿vincular? ¿Dirección? ¡Éxito!\n ");
//¿Aceptar? ¿aún? ¿enviar? Noticias
Ciel? buf[255];
estructura? sockaddr_in? de;
socklen_t? len
Len.
=?tamañode(de);
mientras(1)
{
r? =?recvfrom(fd,buf,sizeof(buf)-1,0,(struct?sockaddr *)&from& amplen);
if(r>0)
{
buf[r]= 0;
printf("¿El? Mensaje? ¿De dónde? %s? es:%s\n ", inet_ntoa(de. sin_addr), buf );
}
Otro
{
Descanso;
}
}
//¿Cerrar? Toma (de alimentación)
Cerrar (FD);
¿Volver? 0;
}test2.c
#¿Contiene? & ltstdio.h & gt
¿#Contiene? & ltstdlib.h & gt
#¿Incluir? & ltunistd.h & gt
#¿Incluir? & ltstring.h & gt
#¿Contiene? <sys/socket.h>
¿#Contiene? & ltnetinet/in . h & gt;
#¿Contiene? <arpa/inet .h >
int? Principal (no válido)
{
//¿Crear? toma (de alimentación)
int? ¿fd? =?socket(AF_INET, SOCK_DGRAM, 0);
if(fd==-1)
{
perror("socket"); p> p>
Salir(-1);
}
printf("¿Crear? ¿Socket? ¡OK!\n ");
/ / ¿crear? ¿instalar? ¿enviar? Dirección
estructura? sockaddr_in? addr = { };
addr.sin_familia? =?AF_INET
addr.sin_port? =?htons(6666);
addr . sin _ addr s _ addr = inet _ addr(" 127 . 0 . 0 . 1 ");
//Enviar? ¿eso? ¿mensaje? ¿A dónde ir? ¿eso? ¿Especificar? Dirección
int? r;
¿Carácter? buf[255];
mientras(1)
{
r? =?read(0,buf,sizeof(buf)-1);
if(r & lt;=0)
romper;
sendto( fd,buf,r,0,(struct?sockaddr *)& addr,sizeof(addr));
}
//¿Cerrar? Toma (de alimentación)
Cerrar (FD);
¿Volver? 0;
}Primero ejecute test1.c, luego test2.c, ingrese el contenido después de ejecutar test2.c y la información se mostrará en la terminal donde se encuentra test1.c.
Los resultados de la ejecución son los siguientes: