Red de conocimiento informático - Computadora portátil - Programación de Cppsocket

Programación de Cppsocket

No necesita varios subprocesos para realizar estas acciones.

Encontré lo que escribí antes y lo cambié 10 veces como dijiste.

Cliente.c:

#incluye & ltstdio.h & gt

#incluye & ltstdlib.h & gt

#incluye & ltstring.h & gt

# include & lterrno& gt

# include & ltsys/types h & gt;

# include & ltsys/socket . h & gt;

# incluir & ltnetinet/in . h & gt;

int main(int argc, char **argv)

{

char wbuf[]= " hola servidor ";

char rbuf[128];

int I;

int sock

struct sockaddr _ in server = { 0 };

struct timeval timeo

timeo .TV _ sec = 0

timeo .TV_usec =. 1000 * 1000; //

socklen _t len ​​​​= sizeof(timeo);

if (argc!= 2)

{

printf("Uso:.

/cliente & lt; dirección IP & gt\ n ");

return-1;

}

sock = socket(AF_INET, SOCK_STREAM, 0);

if(sock <0)

{

error("Crear socket TCP");

return- 1;

}

setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, & amptimeo, len);

server.sin_family = AF_INET

server sin . _ puerto = htons(30000);

inet_pton(AF_INET, argv[1], & amp(server . sin _ addr));

int res = connect(sock, ( struct sockaddr *)& servidor, tamaño de(servidor));

if (RES <0)

{

if(res == EINPROGRESS)

perror("Tiempo de espera del socket de flujo de conexión:");

Otros

perror("Error del receptor del socket de flujo de conexión: ");

Cerrar(calcetín);

return-1;

}

Otros

{

printf( "Conectarse al servidor@%s\n ", argv[1]);

for(I = 0;i<10;i++)

{

int wsize = enviar(sock,wbuf,sizeof(wbuf),0);

if(wsize<=0)

{

perror("Error de escritura :");

Cerrar(calcetín);

return-1;

}

printf(" 1111111i = % d \ n ", I);

mientras(1)

{

intr tamaño = recv(calcetín, rbuf, tamañode(rbuf), 0);

if(rsize & gt; 0)

{

rbuf[rsize]= '\0';

printf("Recibido mensaje del servidor: %s\n ", rbuf);

Break;

}

if(rsize & lt; 0)

{

Cerrar(calcetín);

error("Error de lectura:");

return-1;

}

}

}

Cerrar (calcetines);

Devolver 0;

}

}

server.c:

# incluir & ltstdio.h & gt

# incluir & ltstdlib.h & gt

# incluir & ltstring.h & gt

# incluir & número de error& gt

# incluir & ltsys/types

# incluir. & ltsys/socket . h & gt;

# incluye & ltnetinet/in .

int main(int argc, char** argv)

{

int listeningfd, connfd

struct sockaddr _ en serva DDR = { 0 };

char rbuf[128];

char wbuf[]= " hola cliente "; p>if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

{

perror("Crear socket TCP");

return-1;

}

servaddr.sin_family = AF_INET

serv addr . sin _ addr s _ addr = htonl(in addr _ ANY. );

servaddr . sin _ port = htons(30000);

if( bind(listenfd, (struct sockaddr *)&servaddr, sizeof (servaddr)) == - 1)

{

error("Error de socket de enlace:");

return-1;

p>

}

if(listen FD(10)=-1)

{

error("Error del socket de escucha:") ;

return-1;

}

printf(" = = = = = Esperando solicitud del cliente = = = = = = \n " );

while(1)

{

if( (connfd = aceptar(listenfd, (struct sockaddr*)NULL, NULL)) == - 1)

{

error("Error al aceptar el socket:");

Continuar;

}

mientras(1)

{

n = recv(connfd, rbuf, sizeof(rbuf), 0

if (n & gt0 )

{

rbuf[n]= ' \ 0 ';

printf("recvmsg del cliente: %s\n ",rbuf);

n = enviar(connfd ,wbuf,sizeof(wbuf),0);

If (n & lt=0)

{

error(" error sned:");

Cerrar(connfd);

Romper;

}

}

si no (n & lt ; 0)

{

error("error de recepción:");

Cerrar(connfd);

Interrupción;

}

}

Cerrar(connfd);

}

Cerrar(listenfd);

Devuelve 0;

}

Tiempo de ejecución, cliente

. /cliente la ip de su servidor.

El puerto 30000 que utilicé está codificado en el programa.