#include <>
#include <>
#include <>
#include <>
#include <>
#include <>
using namespace std;
bool confirmar_trasmisicion(char aux, char a[]);
bool iniciar_trasmicion(char a[]);
bool emisor(char a[]);
bool receptor(char a[]);
char mandar_primitiva(char primitiva,char a[]);
unsigned short CRC16(char value);
unsigned short desarmarTrama(char& dato, unsigned int trama);
unsigned int armarTrama(char dato, unsigned short crc);
void rellenar_trama(char a[], char aux[]);
string colocar_crc_a_trama(string aux1);
string sacarle_crc_a_trama(string trama);
string quitar_payload(string trama);
bool confirmar_trasmisicion_trama(char aux[], char a[]);
int contador_maestro=0;
int main(void)
{
int c;
char serial[10]={"COM1"};
//cout<<"ingrese el puerto en mayusculas"<
int opcion=0;
cout<<"iniciar juego = 1 "<
if(opcion==1)
{
//if(iniciar_trasmicion(serial)==true){
while(true){
while(emisor(serial)!=false){}
while(receptor(serial)!=false){}
}
//}
//else cout<<"la trasmisicion no se pudo completar"<
}
if(opcion==2)
{
while(true){
while(receptor(serial)!=false){}
while(emisor(serial)!=false){}
}
}
}
bool iniciar_trasmicion( char a[] )
{
FILE *dp;
if ((dp = fopen(a, "wt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
bool bo=false;
char aux;
char ma;
cout<<"estableciendo conexion : ingrese la letra E para iniciar conexion"<
cin>>ma;
aux=ma;
cout<<"esperando confirmacion de recepcion..."<
fflush(dp);
fclose(dp);
int contador =0;
while(contador!=11)
{
if(contador==10)return false;
if(confirmar_trasmisicion(ma,a)==true)return true;
else confirmar_trasmisicion(ma,a);
contador++;
}
fclose(dp);
}
bool confirmar_trasmisicion(char aux, char a[])
{
FILE *dp;
if ((dp = fopen(a, "rt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
char c;
c=fgetc(dp);
if(c==121){cout<<"dato enviado correctamente ACK"<
char copia[1]={aux};
rellenar_trama(a,copia);
}
fclose(dp);
}
bool confirmar_trasmisicion_trama(char aux[], char a[])
{
FILE *dp;
if ((dp = fopen(a, "rt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
char c;
c=fgetc(dp);
if(c==121){cout<<"trama enviada correctamente ACK"<
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
string aux1=aux;
string nueva_trama_rellena_de_crc;
nueva_trama_rellena_de_crc = colocar_crc_a_trama( aux1);
while(nueva_trama_rellena_de_crc.size()!=19){
nueva_trama_rellena_de_crc+="f";
}
int ingresar_dato;
cout<<"desea dañar la trama? 1= SI 2= NO"<
if(ingresar_dato==1){string da;cout<<"ingrese la nueva trama dañada"<
fflush(dp);fclose(dp); char *aa;aa=new char [nueva_trama_rellena_de_crc.size()+1];strcpy(aa,nueva_trama_rellena_de_crc.c_str()) ; confirmar_trasmisicion_trama(aa,a);}
else{
fputs(nueva_trama_rellena_de_crc.c_str(), dp);
fflush(dp);fclose(dp);
char *aa;aa=new char [nueva_trama_rellena_de_crc.size()+1];strcpy(aa,nueva_trama_rellena_de_crc.c_str()) ; confirmar_trasmisicion_trama(aa,a);
}
}
fclose(dp);
}
bool emisor(char a[]){
char aux[48];
cout<<"Ingrese el texto que desea enviar,para finalizar ingrese la letra f "<
if(aux[0]=='f'||aux[0]=='F'){FILE *dp;
if ((dp = fopen(a, "wt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
string aux1=aux;
string nueva_trama_rellena_de_crc;
nueva_trama_rellena_de_crc = colocar_crc_a_trama( aux1);
while(nueva_trama_rellena_de_crc.size()!=19){
nueva_trama_rellena_de_crc+="f";
}
int contador =0;
cout<<"esperando confirmacion de recepcion..."<
fputs(nueva_trama_rellena_de_crc.c_str(), dp);
fflush(dp);fclose(dp);
while(contador!=11)
{
if(contador==10)return true;
if(confirmar_trasmisicion('f',a)==true){
int finalizar;cout<<"MODO RECEPTOR: Esperando datos..."<
cin>>finalizar;
if(finalizar==1){system("exit");cout<<"deberia salirse"<
}
else confirmar_trasmisicion('f',a);
contador++;
}
}
else{
FILE *dp;
if ((dp = fopen(a, "wt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
string aux1=aux;
string nueva_trama_rellena_de_crc;
nueva_trama_rellena_de_crc = colocar_crc_a_trama( aux1);
while(nueva_trama_rellena_de_crc.size()!=19){
nueva_trama_rellena_de_crc+="f";
}
cout<<"TRAMA : "<
cout<<"desea dañar la trama? 1= SI 2= NO"<
if(ingresar_dato==1){string da;cout<<"ingrese la nueva trama dañada"<
fflush(dp);fclose(dp); if(confirmar_trasmisicion_trama(aux,a)==true) {return true;}else {return true;};}
else{
fputs(nueva_trama_rellena_de_crc.c_str(), dp);
fflush(dp);fclose(dp);
if(confirmar_trasmisicion_trama(aux,a)==true) {return true;}else {cout<<"se salio "<
}
}
char mandar_primitiva(char primitiva, char a[] ){
FILE *dp;
if ((dp = fopen(a, "wt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
fputc(primitiva, dp);
fflush(dp);fclose(dp); }
void rellenar_trama(char a[], char aux[] ){
FILE *dp;
if ((dp = fopen(a, "wt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");}
string aux1=aux;
while(aux1.size()!=19){
aux1+="f";
}
fputs(aux1.c_str(), dp);
fflush(dp);fclose(dp);
}
string quitar_payload(string trama){
string nuevo;
for(int i=0;i
{}else if(trama[i]!='f'&&trama[0]!='f'){nuevo+=trama[i];}
}
return nuevo;
}
bool receptor(char a[]){
cout<
cout<<"Esperando datos... "<
if ((dp = fopen(a, "rt"))==NULL){printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
char capturar[20];
fgets(capturar,20,dp);
if(capturar[0]=='f'||capturar[0]=='F'){cout<<"Enviando confirmacion de recepcion [ACK]"<
string nuevo;
nuevo = quitar_payload(capturar);
cout<<"sin crc : "<
cout<<"aux1 : "<
cout<<"crc_generado_del_emisor : "<
return true;
}
}
unsigned short CRC16(char value){
//poly = polinomio de crc16 (x16 + x15 + x2 + 1) = 0xA001
unsigned short poly = 0xA001, init_value = 0x0000, exit_value = 0x0000;
unsigned short res;
char i;
res=value;
res^=init_value;
for(i=0;i<8;i++){
if(res & 1){
res>>= 1;
res^=poly;
}else{
res>>= 1;
}
}
res^=exit_value;
res^= 0xFFFF;
return res;
}
//anexa el dato al crc armando la trama para enviar
unsigned int armarTrama(char dato, unsigned short crc)
{
unsigned int res = crc;
res <<= 8;
//cout << res << endl;
res += dato;
return res;
}
//retorna el CRC que sale de la trama recibida y por referencia, dato devuelve el caracter recibido en la trama
unsigned short desarmarTrama(char& dato, unsigned int trama)
{
unsigned int crc = trama;
crc >>= 8;
unsigned short res = crc;
crc <<= 8;
dato = trama-crc;
return (unsigned short) res;
}
string sacarle_crc_a_trama(string trama)
{string nuevo;
for(int i=0;i
{
nuevo+=trama[i];
}
}
return nuevo;
}
string colocar_crc_a_trama(string aux1)
{
int sumatoria=0;
for(int i=0;i
char datos = aux1[i];
unsigned int i;
unsigned short inival;
//genera el crc del caracter
inival = CRC16(datos);
// cout << "El CRC del caracter: " << datos << " es: " << inival << endl;
//genera la trama en un entero sin signo
unsigned int trama = armarTrama(datos, inival);
//cout << "trama = " << trama << endl;
//data almacena el dato que se saca de la trama
char data;
/*dañamos trama -- descomentariar para reconocer trama dañada
trama += 1;
cout << "trama modificada = " << trama << endl;
*/
unsigned short crc = desarmarTrama(data, trama);
//crc almacena el crc para comparar la trama
// cout << "dato en trama: " << data << ", CRC en trama:" << crc << endl;
//para sabes si la trama llego bien se compara crc con el CRC16 del
//dato recibido, si son iguales, la trama esta bien, de lo contrario,
//hay que pedir la trama de nuevo
sumatoria+=CRC16(data);
cout<<" sumatoria : "<< sumatoria<
char poli[65536];
aux1+=itoa(sumatoria,poli,10);
return aux1;
}
miércoles, 19 de enero de 2011
chat por puerto serial r-232
Publicado por
00000000
en
8:24
Etiquetas: chat c++, serial r-232 c++
Suscribirse a:
Enviar comentarios (Atom)
.
Actualización automatica
Labels
- -Hacer una subrutina que retorne la primera vocal leída del teclado. (1)
- :-OOO (1)
- :o (1)
- [php] ; safe mode ; safe_mode = off ; End: (1)
- #*7337# (1)
- #*7337# el codigo de la muerte (1)
- 00000000 (19)
- 1. (1)
- 10 post diarios (1)
- 1000 visitas (1)
- 138 (1)
- 139 y 445 (1)
- 15 números y retorne en otro arreglo las posiciones que ocupan los números impares (1)
- 15 notas en un arreglo de 1D (1)
- 2^64 (1)
- 213.3.44.238 (1)
- 3.0 (1)
- a (1)
- acm vulnerable a xss (1)
- adsense-noreply-es(arroba)google.com (1)
- Aleph cero (1)
- Alternativas al uso de un antivirus (1)
- anidar proxy (1)
- animal clonado (1)
- animales clonados (1)
- años en c++ (2)
- archivos c++ (1)
- Autosurf gratis (1)
- Aviso Importante Caja Madrid (1)
- aviso/arroba/bancasantander.es (1)
- b (1)
- backtraking (1)
- baile Tunak Tunak (1)
- baile wow (1)
- bas y ram (1)
- bisiesto en c (1)
- bisiesto en c++ (1)
- black board easy (1)
- blackboard (2)
- buena escritura de reqeurimientos (1)
- burlar (1)
- burlar rapidshare (1)
- burlar yahoo (1)
- burro (1)
- busca en mi blog (1)
- buscador para c (1)
- buscador radical (1)
- buscar arhcvio en c++ (1)
- buscar en un blog (1)
- Busqueda de servicios rpc (1)
- busquedas dns (1)
- busquedas dns en windows (1)
- busquedas dns en linux (1)
- c (3)
- c++ (5)
- Caja Madrid (1)
- calculadora 26 opciones en c++ (1)
- calculadora con muchas opciones en c++ (1)
- calculadora en c++ (1)
- camaras ip (1)
- Cambiar contraseña en blackboard (1)
- Cambiar contraseña en blackboard facilmente (1)
- cerrando puertos 137 (1)
- cerrar 137 (1)
- cerrar 139 (1)
- cerrar 445 (1)
- chat c++ (1)
- cheat facebook (1)
- chiste geek (1)
- cifrado radical (1)
- clonacion (1)
- clonaning (1)
- clonar (1)
- clonar simcard (1)
- clonar tarjeta sim (1)
- cluster (1)
- clusterty (1)
- codigo Autosurf (1)
- codigo fuente de cambio de dinero para maquinas dispensadoras en c++ (1)
- codigo fuente en c++ (1)
- codigo spyware (2)
- codigo virut (1)
- cojer msn iniciado (1)
- colombia 1 venezuela 2 (1)
- colombia 2025 (1)
- comando baile wow (1)
- comandos aircrackcomandos (1)
- comandos matricez en sage (2)
- comandos sage (2)
- comandos snort (1)
- comandos suite (1)
- comnados sage (1)
- como hacer dinero con software libre realidad o ficcion? (1)
- como instalar eyeos en un host gratuito (1)
- como se hacen las canciones de daft punk (1)
- como ser parte de sun (1)
- comparar archivos en c++ (1)
- comparar binarios c++ (1)
- comparar c++ (1)
- complemento tor para opera (1)
- convertir programa en portable (2)
- Convertir videos y audio usando Super (1)
- cookie de DART (1)
- cosas de google (1)
- cosas que hay qeu saber de google (1)
- cosas raras de google (1)
- cosota lorena orozco (1)
- creador (1)
- creador del c++ (1)
- crear portables (1)
- criptosage (1)
- cuadrado magico (1)
- cuadrado magico en c++ (1)
- d (1)
- Dadas dos matrices A y B intercambiar los minimos de A con los maximos de B.cpp (1)
- Dado el vector T de tamao n. Si el tamao es par invertir los elementos de la mitad de los elementos.cpp (1)
- dance Tunak Tunak (1)
- danceTunak (1)
- derivadas (1)
- derivadas en batch (1)
- descargar virut (1)
- descubrir-historial (1)
- descubrir-historial.blogspot.com/ (1)
- dibujar rombo en c (1)
- dibujar rombo en c++ (1)
- división por restas sucesivas en c++ (1)
- Dj Tatanka Qlimax cancion (1)
- Dj Tatanka Qlimax que buena cancion XD (1)
- Dj Technoboy (1)
- Dj Technoboy - Qlimax (1)
- download (1)
- dummies (1)
- easy blackboard (1)
- ect..jeje (1)
- editar informacion en black board (1)
- Editar información personal en blackboard (1)
- ejemplos basicos en java (1)
- El Gran Hotel CANTOR Primera Parte (1)
- El Gran Hotel Cantor Segunda Parte (1)
- el mejor video lorena orozco (1)
- el nuevo buscador para tu disco duro c: (1)
- el primer perro clonado (1)
- eliminar c (1)
- eliminar un archivo de forma segura en c (1)
- Elogio a la Dificultad (1)
- encriptador 00000000 (1)
- encriptador radical (1)
- Enjoy (1)
- entrando a los cursos del blackboard suite (1)
- entrar a la plataforma black board (1)
- escritura de reqeurimientos (1)
- explorar de archivos en 3d para linux (1)
- explorar para linux (1)
- eyeos (1)
- eyeos beta (1)
- eyeOS el sistema operativo 2.0 (1)
- f (1)
- factorial en c++ (1)
- fecha en c (1)
- fecha en c++ (1)
- free cam (1)
- fuente de codigo (1)
- fuente en c++ (1)
- fumado (1)
- fumar (1)
- fumar es malo.down fumar (1)
- funciones basicas para manejar matricez en sage (1)
- funciones biginteger (1)
- funciones en c++ (1)
- funciones sage (1)
- funciones smf (1)
- furier c++ (1)
- g (1)
- gauss hp50g (1)
- gauss jordan en hp50g (1)
- gauss jordan hp50g (1)
- google (1)
- Guía de laboratorio firewall e ids (1)
- guia firewall (1)
- hacer ping n linux (1)
- haciendo pings con nmap en linux (1)
- hack black board easy (1)
- hacking (1)
- hacking acm (1)
- hacking rapidshare (1)
- hacking smf (1)
- herramientas libres batch (2)
- hola (1)
- hola mundo en java (1)
- Hotel Cantor (1)
- hoy te quiero bastante (1)
- hp vulnerable (1)
- HP-UX 11.0 ftpd exploit :S (1)
- http://82.107.162.217/database/index.html (1)
- http://beta.eyeos.info/ (1)
- http://criptosage.freevar.com/wordpress/ (1)
- http://descubrir-historial.blogspot.com/ (1)
- http://projecteuler.net (1)
- http://rwmms.rai.ir:82/red/laca.html (1)
- http://www.livecdlist.com/ (1)
- http://www.tidaholmsflygklubb.se/content.asp?ContentID=643 (1)
- i love cosita (1)
- identicacion con nmap (1)
- identificacion de servicios con nmap (1)
- index.php (1)
- index.php~ (1)
- instalar eyeos (1)
- Instalar un mini-servidor web en windows (1)
- intra (1)
- intranet (1)
- intranet de la nasa (1)
- invertir un número en c++ (1)
- java base (1)
- java en basico (1)
- javax (1)
- javeriana clusterty (1)
- jeje (1)
- John Withney (1)
- key en c++ (1)
- keyboard hack (1)
- keyboard spam (1)
- keylogger en c++ (1)
- keysito (1)
- la Caixa (1)
- la espada (1)
- la espada y la piedra (1)
- la media en java (1)
- la mediana en java (1)
- la moda en java (1)
- la multiplicatoria en java (1)
- la sumatoria en java (1)
- la vida segun quino (1)
- lab firewall (1)
- ley 1273 (1)
- life (1)
- linux en nmap (1)
- list of list c++ (1)
- lista dentro de una lista (1)
- listas de listas (1)
- Live CDs para pentesting (1)
- lorena orozco (1)
- Los de Linux no nos meamos en las manos (1)
- luego escriba las notas aprobatorias (1)
- mapa mental de buena escritura de requerimientos (1)
- master (1)
- matecom (1)
- math.h (1)
- matricula en c (1)
- matricula en c++ (1)
- matrix en sage (1)
- matriz en sage (1)
- mayusculas y minusculas c++ (1)
- menu en c++ (1)
- Merchandising (1)
- Metasploit Framework (1)
- Mi Desorden Tiende A Un Orden (1)
- mi escritorio (1)
- mi orden ;que desroden (1)
- mini-servidor windows (1)
- mochila backtraking (1)
- msrpc (1)
- multiplicacion con biginteger (1)
- multiplicación rusa en c++ (1)
- multiplicar numeros con biginteger (1)
- nasa (1)
- net (1)
- newbie (1)
- nmap linux (1)
- no eperes mas en rapidshare (1)
- no me carga eyeos (1)
- numeros muy grandes en c++ (1)
- online series (1)
- opera en tor (1)
- operator (1)
- orden dentro del caos (1)
- origen daft punk (1)
- Pagina Para Mandar Sms A toDo El Mundo GRATISS (1)
- paz (1)
- perezas (1)
- phising banco santander (1)
- php.ini (1)
- ping (1)
- ping en linux (1)
- pirateria (1)
- pirateria para dummies (1)
- pishing bancos (1)
- poema para el infinito (1)
- portabes (1)
- portabilizador (1)
- portable (1)
- problema 1 projecteuler . (1)
- programa para buscar en un blog (1)
- programacio (1)
- programacion (1)
- programacion trasmilenio (1)
- progreso (1)
- prometeus (1)
- Propagaciones batch (1)
- Propagaciones por ghost (1)
- proxys anidados (1)
- proyecto burro (1)
- proyecto trasmilenio (1)
- publicidad (1)
- publicidad + strobe (1)
- publicidad basada en intereses (1)
- Pude haber sido el rey del mundo pero me dio pereza levantarme de la cama (1)
- python y sage (1)
- que es (1)
- que es Aleph cero (1)
- Que esperar (1)
- que pasara en colombia en el año 2025 (1)
- r (1)
- radical (1)
- radical sage (1)
- radical virus (15)
- radicalvirus (1)
- raidcal virus (1)
- raiz digital de un numero (1)
- raiz digital en cc++ (1)
- raras (1)
- red (1)
- Requiem (1)
- Requiem for Star Wars (1)
- restar numeros con biginteger (1)
- robar msn (2)
- rombo en c (1)
- rombo en c++ (1)
- rpc (1)
- saber la version de wordpress desde el codigo fuente (1)
- sage (1)
- save msn (1)
- se busca publicidad (1)
- secure anonymous (1)
- secure anonymous by 0000000 (1)
- securi"arroba"lacaixa.es (1)
- seno en c++ (1)
- serial r-232 c++ (1)
- serie fibonacci en c++ (1)
- Series gratis online (1)
- servicios con nmap (1)
- servicios rpc (1)
- servicios rpc linux (1)
- sin estar falcultado para ello (1)
- Sistemas de Detección de intrusos y Snort. (1)
- situacion del sistema penal colombiano en relacion con los delitos de internet (1)
- smf (1)
- snort (1)
- software burro (1)
- Software Freedom Day (1)
- Software Freedom Day 2009 (1)
- Software Freedom Day 2009 Bogotá (1)
- software portable (1)
- solo para ti (1)
- spam (1)
- spyware en c (1)
- spyware en c++ (1)
- sub en vino 3.0 (1)
- suite aircrack (1)
- suma con biginteger (1)
- sumar dos vectores en c++ (1)
- sumar en c++ (1)
- sumar numeros con biginteger (1)
- sun (1)
- tad lista (2)
- Teclator (1)
- the save msn (1)
- the msn (1)
- the second life (1)
- tiempo rapidshare (1)
- tipo abstracto de datos (1)
- traductor c++ (1)
- traductor de idiomas en c++ (1)
- traductor para c++ (1)
- troyano virut (1)
- trucos Teclator (1)
- Tunak Tunak (1)
- un ingeniero de Microsoft (1)
- usb 3.0 (1)
- uso extensivo de figuras geométricas en 3D con z-buffer en c++ (1)
- vectores en c++ (1)
- videos lorena orozco (1)
- videotutos Metasploit Framework (1)
- vino 3.0 (1)
- virus (4)
- virus spam (1)
- virus virut (1)
- virus youtube (1)
- virut (1)
- vocales de minusculas a mayusculas c++ (1)
- Vulnerabilidad en múltiples cortafuegos personales (1)
- vulnerabilidades MSRPC (1)
- warning fumar (1)
- windows (1)
- wow dance (1)
- wtf (1)
- www.spirit.com/Network/net0303.html (1)
- xd (1)
- xorg.conf.mdm (1)
- yahoo (1)
- उसब virus (1)
- एलिमिनर वायरस दे ला उसब (1)
0 comentarios:
Publicar un comentario