función socket linux c send()
Le daré un fragmento de código compilado y ejecutado en Linux, con comentarios simples, client.c es el siguiente:
La función send() se encuentra al final del cliente. c
#includelt;stdio.hgt;
#includelt;stdlib.hgt;
#includelt;string.hgt;
#includelt;errno.hgt;
#includelt;string.hgt;
#includelt;errno.hgt;
#includeslt;errno.hgt;
#includelt;string.hgt;
#includelt;errno.hgt;
#includelt;sys/types.hgt;
#includelt; sys/socket.hgt;<
#includelt;netinet/in.hgt;
#define?La longitud de los mensajes enviados y recibidos
#define?PORT ?6666//port?
int?main(int?argc, char**?argv)
{
intsockfd,?n;
charrecvline[MAXLINE],?sendline[MAXLINE];
struct?sockaddr_inservaddr;
if(?argc?! =?2 ){
printf("uso:?./client?lt;ipaddressgt;\n");?// uso
salir(0);
}
if(? (sockfd?=?socket(AF_INET,?SOCK_STREAM,?0))?lt;?0){//Crear socket, no conectado
printf ("crear?socket? error:?s(errno:? d)/n",?strerror(errno),errno);
salir(0);
}
//memset(dirección de estructura, borrar, longitud para borrar); borrar struct servaddr y establecer todos los datos de la estructura en 0
//Igual que bzero(dirección de estructura, longitud para borrar) ; borrado de forma predeterminada
p>
memset(amp;servaddr,?0,?sizeof(servaddr));?
servaddr.sin_family?=?AF_INET;/sa_family es el tipo de comunicación, el valor más utilizado es "? AF_INET"
servaddr.sin_port?=?htons(PORT);?//número de puerto
//servaddr.sin_addr .s_addr=inet_addr(argv[1]);?/ /IP del servidor, las siguientes funciones son las mismas
if(?inet_pton(AF_INET,?argv[1],?amp;servaddr.sin_ad
dr)? (struct?sockaddr*)amp;servaddr,?sizeof(servaddr))?lt;?0){?
printf("connect?error:?s(errno:?d)\ n", strerror(errno), errno);
salir(0);
}
printf("enviar?msg?to?servidor:? \n");
fgets(sendline,?MAXLINE,?stdin);?//Ingrese la información enviada al servidor
if(?send(sockfd,?sendline, ? strlen(sendline),?0)?lt;?0)?//Enviar información al servidor
{
printf("send?msg?error:?s( error: ? d)/n",?strerror(errno),?errno);
salir(0);
}
cerrar(sockfd) ;? //Cerrar el socket
exit(0);
}
Programa del servidor: server.c de la siguiente manera: #includelt;
}
p>
#includelt;stdlib.hgt;
#includelt.string.hgt;
#includelt ;errno.hgt;
#includelt; sys/types.hgt;
#includelt;sys/socket.hgt;
#includelt; .hgt;
#define?
p>#define?
int?main(int?argc, char**?argv)
{
intlistenfd, ?connfd;
struct?sockaddr_in?servaddr;
charbuff[MAXLINE];
int? n;
if(? (listenfd?=? socket(AF_INET,?SOCK_STREAM,?0))?==?-Crear socket
printf("create?socket?error :?s(errno:?d)/n", strerror( errno), errno);
salir(0);
}
memset( amp;servaddr,?0,?sizeof(servaddr));/ /Estructura clara
servaddr.sin_family?=?AF_INET;?//sa_family es el tipo de comunicación, el valor más utilizado es "? AF_INET"
servaddr.sin_addr.s_addr?=? htonl(INADDR_ANY);?//Especificar para aceptar cualquier conexión
servaddr.sin_port?=?htons(PORT);?/ /Puerto de escucha
// Vincula la dirección a la interfaz del socket
if(?bind(listenfd,?(struct?sockaddr*)amp;servaddr,?sizeof(servaddr)) ?==?-1){
pr
intf("bind?socket?error:?s(errno:? d)\n",strerror(errno),errno);
salir(0);
}
if(?listen(listenfd,?10)? ==?-1){// Empieza a escuchar, el número máximo de solicitudes es 10, puedes configurarlo tú mismo
printf ("escucha ?socket?error:?s(errno:? d)\n",strerror(errno),errno);
salir(0);
} p>
printf("======esperando?la?solicitud del cliente======\n");
mientras(1){
p>?// Establecer comunicación y esperar a que la función connect() del cliente se conecte if(? (connfd?=?accept(listenfd,? (struct?sockaddr*)NULL,?NULL))?==? -1) p>
?{ printf("aceptar?socket?error:?s(errno:? d)",strerror(errno),errno); continuar } n?=?recv(connfd, ?buff,?MAXLINE ,?0);?//n El error se puede determinar. La función recv() se puede utilizar directamente aquí
//La información recibida se almacena en buff[n] ?\0';?// agregar terminador printf("recv?msg?from?client:? s\n",?buff);
}
cerrar(escucharfd);
p>}