Re: [Programación] pasaje de mensajes a un socket
emiliano laneri
elaneri en gmail.com
Sab Mar 1 12:13:43 ARDT 2008
> Buenas Lista, mi pregunta es como pasar mensajes a traves de SOCKET.
> Es programacion bajo linux. Estoy estudiando bajo el libro de
> Unix_Network_programming y no sale lo que necesito.
yo tengo este ejemplo de socket en c funciona por lo menos en linux =)
server
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <iostream>
#include <unistd.h>
#define SADDR struct sockaddr *
void *print_message_function( void *ptr );
int main() {
struct sockaddr_in sa; char buf[1024];
int s, i, n = sizeof(sa);
if ((s=socket(AF_INET,SOCK_STREAM,0)) < 0) return(1);// make socket
sa.sin_family = AF_INET; // set type
sa.sin_addr.s_addr = htonl(INADDR_ANY); // set wildcard
sa.sin_port = htons(6001); // set port
if ( bind(s, (SADDR)&sa, n) < 0 ) return(1); // bind address
listen(s, 5); // queue callers
if ( ( s = accept(s, (SADDR)0, 0) ) < 0 ) return(1); // accept call
i = read(s, buf, 1024); // read message
buf[i] = (char)0; // mark its end
printf ("Message: %s" , buf );
}
cliente
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
struct hostent *hp; struct sockaddr_in sa;
int s, n = sizeof(struct sockaddr_in);
if ((s=socket(AF_INET,SOCK_STREAM,0)) < 0) return(1);// make socket
if ( (hp = gethostbyname(argv[1])) == 0 ) return(1); // host details
memset(&sa, 0, n); // init struct
memcpy(&sa.sin_addr, hp->h_addr, hp->h_length); // set host
sa.sin_port = htons(6001); // set port
sa.sin_family = AF_INET; // set type
if (connect(s,(struct sockaddr *)&sa,n)<0) return(1);// connect
write(s, argv[2], strlen(argv[2])); // send message
}
suerte
--
registered linux user #464005
mgnu.com.ar
Saludos emi
.
.
. . .
Más información sobre la lista de distribución Programacion