Código de C/Visual C - INTERCAMBIO-MENSAJES-CONSOLA

Imágen de perfil

INTERCAMBIO-MENSAJES-CONSOLAgráfica de visualizaciones


C/Visual C

Publicado el 16 de Agosto del 2022 por Hilario (122 códigos)
422 visualizaciones desde el 16 de Agosto del 2022
--------------------------------------------------
**Ut desint vires, tamen est laudanda voluntas**
--------------------------------------------------

Hilario Iglesias Martínez.
---------------------------
Realizado en:
El programa fue realizado en plataforma
LINUX Ubuntu 20.04.4 LTS.
Bajo el standard ANSI C.-C-11

-------------------------------------
Nueva configuración de intercambio de mensajes
por consola.
---------------------------------------------
Compilación:
Variables_Servidor.h debe estar en el mismo directorio
que:Nuevo_Servidor.c
$ gcc -Wall Nuevo_Servidor.c -o Nuevo_Servidor

**************************************************
Programa que sirve para interactuar entre dos consolas Linux, o entre dos ordenadores
diferentes, siempre que su configuración de cortafuegos lo permita. Este programa está
realizado para aprender por mi parte un poco más sobre ANSI-C, bajo plataforma Linux.
Se puede interactuar con el mismo mediante el comando nc, o telnet.**
--------------------------------------------------------------------------
Disce quasi semper victurus vive quasi cras moriturus.
--------------------------------------------------

-------------------------------------------------
***********CARACTERISTICAS DE LA RED**********
--------------------------------------------------
enxd03745c56b84: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.27 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::e1fb:835d:5da:e2a3 prefixlen 64 scopeid 0x20<link>
ether d0:37:45:c5:6b:84 txqueuelen 1000 (Ethernet)
RX packets 655816 bytes 772910795 (772.9 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 104452 bytes 20676735 (20.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Bucle local)
RX packets 1835 bytes 200525 (200.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1835 bytes 200525 (200.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.26 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::c61d:4836:b651:a200 prefixlen 64 scopeid 0x20<link>
ether 1c:1b:b5:85:a4:d0 txqueuelen 1000 (Ethernet)
RX packets 1580 bytes 153010 (153.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1937 bytes 232054 (232.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-------------------------------------------------------------------------
Para interactuar por consola usar las IPs de la configuración del
ordenador donde se ejecute la aplicacion.
Comandos bajo consola: nc, telnet, como CLIENTE.
Ejemplos de entrada en el prompt segunda consola linux:
:~$ nc 192.168.0.27 8358
:~$ telnet

Requerimientos

Realizado en:
El programa fue realizado en plataforma
LINUX Ubuntu 20.04.4 LTS.
Bajo el standard ANSI C.-C-11

2.0

Publicado el 16 de Agosto del 2022gráfica de visualizaciones de la versión: 2.0
423 visualizaciones desde el 16 de Agosto del 2022
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/*
Variables_Servidor.h
*/
 
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <unistd.h>
char *tarjeta_red;
int  salida;
char comando[60];
socklen_t Longituc_Estructura;
int domain, type, protocol,MiSocket,i,Socket_Conexion_Cliente,h;
char Codigo_ascii[17];
struct sockaddr_in Miservidor, Mi_Cliente;
char buferIntercambio[90];
 
 
 
/*
Nuevo_Servidor.c
*/
#include"Variables_Servidor.h"
 
int main()
{
printf("\n");
printf("--------------------------------------------------\n");
printf("***********CARACTERISTICAS DE LA RED**********\n" );
printf("--------------------------------------------------\n");
sprintf (comando, "ifconfig");
salida = system (comando);
 
domain=PF_INET;
type=SOCK_STREAM;
protocol=0;
//void Sabe_Tipo_Red();//Llamada configuración de Red.
MiSocket= socket (  domain,   type,   protocol);
//printf("domain: %d type:%d  protocol:%d  socket:%i Descriptor Socket:%d \n",domain,type,protocol,socket,MiSocket);
if (MiSocket == -1)
{
printf("Hubo un error al abrir el socket\n");
}
else
	printf("Socket abierto con éxito\n" );
 
 
/*
   Para una aplicación de socket que usa el Protocolo de Internet versión 4 (IPv4),
   la familia de direcciones AF_INET usa la estructura de direcciones sockaddr_in
   como expresión típica:
   strucServidor.sin_family = AF_INET;
   strucServidor.sin_port = htons(Puerto);
   strucServidor.sin_addr.s_addr = inet_addr(IP);
   */
 
printf("Número de puerto elegido para la IP:8358\n");
 
Miservidor.sin_family = AF_INET; /* Familia de direcciones */
Miservidor.sin_port = htons(8358); /* Ordenación de la red */
//my_addr.sin_addr.s_addr = inet_addr ("192.168.0.27); activar opcion IP
//Miservidor.sin_addr.s_addr = inet_addr("127.0.0.1"); activar opción IP
Miservidor.sin_addr.s_addr = INADDR_ANY;//Cualquier IP.
/* Pone a cero el resto de la estructura  -Activar para otras pruebas*/
//memset(&(Miservidor.sin_zero), '\0', 8);-Activar para otras pruebas
/* Chequear si devuelve -1 que indica no enlazado! */
//if ((bind(sockDescriptor, (struct sockaddr *)&strucServidor, sizeof(strucServidor))) != 0)
printf("Asociado:Puerto, IP y Socket (con exito si la salida es=0, y no asociado si es igual:-1) --> %i\n",(bind(MiSocket, (struct sockaddr *)&Miservidor, sizeof(Miservidor))));
 
if ((bind(MiSocket, (struct sockaddr *)&Miservidor, sizeof(Miservidor)))==!0)
{
 
	printf("Asociado:Puerto, IP y Socket.\n");
 
}
 
 
listen(MiSocket,5);//int listen(int sockfd, int backlog);
 
//int backlog, es el número de clientes de cola.
//*****************************************
//---------------ACCEP()----------------------------
/*
--------------------------------------------------------------------
La llamada accept() al sistema  se usa con socket basado en conexión
        tipos (SOCK_STREAM, SOCK_SEQPACKET). Se extrae la primera
        solicitud de conexión en la cola de conexiones pendientes para el
        conector de escucha, sockfd, crea un nuevo descriptor
        de archivo que hace referencia a ese socket.
        El socket recién creado no está en estado de escucha. El original
        socket "MiSocket"-inicial- no se ve afectado por esta llamada.
        El argumento "sockfd" es un socket que ha sido creado con
        socket(2), vinculado a una dirección local con bind(2), y es
        escuchando conexiones después de una segunda escucha .
        El argumento "addr" es un puntero a una estructura sockaddr. Esta
        estructura se rellena con la dirección del socket
        conocido por la capa de comunicaciones. El formato exacto de la
        la dirección devuelta por addr está determinada por la dirección
        del socket
        El argumento "addrlen" es un argumento que el cliente que llama
        a conexión debe iniciarlo para que contenga el tamaño (en bytes)
        de la estructura  apuntada por addr; conteniendo el tamaño real de
        la dirección de conexión.
        */
Socket_Conexion_Cliente=accept(MiSocket,(struct sockaddr *)&Socket_Conexion_Cliente, &Longituc_Estructura);
 
if(Socket_Conexion_Cliente<0)
  {
    printf("Hubo un error al aceptar comunicación\n");
 
    return 1;
  }
 
//-----------------------------------------------------
/* Una vez aceptado el CLIENTE.Ahora debemos de ir a las llamadas
 "read()" y  "write()" para poder a través de un bufer de intercambio
 ya declarado en "Variables_Servidor.h" iniciar la conversación
 entre consolas.
*/
char buferIntercambio[90]; //Reserva de buffer para el intercambio de 90bytes write y read
    int h;
    // Este es un bucle  repetitivo read >-> write para el  chat interactivo
    for (;;) {
        bzero(buferIntercambio, 90);//borra los datos en los n bytes de la memoria
       //comenzando en la ubicación señalada , escribiendo ceros (bytes que contiene '\0') en esa área.
 
        // Leemos el mensaje del cliente y lo copiamos en buferIntermedio.
        read(Socket_Conexion_Cliente, buferIntercambio, sizeof(buferIntercambio));
 
        // Imprimimos el contenido del buffer del cliente.
        printf("Mensaje del cliente: %s\t : ", buferIntercambio);
        bzero( buferIntercambio,90);//volvemos a borrar datos
        h = 0;
        // Copiamos el mensaje del Servidor en el buffer.
        while ((buferIntercambio[h++] = getchar()) != '\n');
        //repetir bucle mientras no sea igual.
        //chatServClient es el nuevo descriptor de socket creado por aceppt.
        //Para cada cliente aceptado se crear'un nuevo Descriptor Socket
 
        //  Mandamos el contenido del bufer al client utilizando la función write().
        write(Socket_Conexion_Cliente, buferIntercambio, sizeof(buferIntercambio));
 
        // Si el mensaje contiene  "hasta pronto" entonces el seridor sale y el chat termina.
        if (strncmp("hasta pronto", buferIntercambio, 12) == 0)
           // la llamada strncmp compara caracteres,
            //en este caso le decimos que compare 16.
            // si el servidor manda el mensaje "hasta luego lucas" 16 bytes --16) == 0)
            //el servidor saldrá de la conexión
         //***************************************
 
 
         {
            printf("ME TUVE QUE IR \n");
            break;
 
        }
        }
        }



Comentarios sobre la versión: 2.0 (0)


No hay comentarios
 

Comentar la versión: 2.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s7267