elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [SOLUCIONADO][C#] Evitar la lectura de la tecla intro en sockets tcp/ip
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO][C#] Evitar la lectura de la tecla intro en sockets tcp/ip  (Leído 3,595 veces)
Dryken

Desconectado Desconectado

Mensajes: 117


El arte de vencer se aprende en las derrotas


Ver Perfil WWW
[SOLUCIONADO][C#] Evitar la lectura de la tecla intro en sockets tcp/ip
« en: 28 Diciembre 2012, 15:19 pm »

He creado por modo consola 2 app que se comunican entre ellas, cliente y servidor. Lo típico, en el cliente escribes algo y el servidor lo recibe.

Funciona correctamente, pero el único "problema" si es que puede llamarse así es que en el servidor se muestra lo enviado desde el cliente pero con un salto de línea. Creo que el problema es que al pulsar la tecla intro para enviar, dicha tecla también se envía.

Llevo bastante tiempo intentando averiguar como solucionarlo pero ya tengo la mente quemada, ojalá algunos tenga la mente más fresca.

Servidor

Código
  1. using System.IO;
  2. using System.Diagnostics;
  3. using System.Text;
  4. using System.Threading;
  5. using System.Runtime.InteropServices;
  6. using Microsoft.Win32;
  7. using System;
  8. using System.Net.Sockets;
  9. using System.Net;
  10.  
  11. namespace socket_servidor{
  12. class Program{
  13.  
  14. public static void Main(string[] args){
  15.  
  16. Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  17.            IPEndPoint ep = new IPEndPoint (IPAddress.Any, 1238);
  18.  
  19.           try {
  20.               s.Bind (ep);
  21.               s.Listen (25);
  22.   Socket accepted = s.Accept();
  23.  
  24.                   Console.WriteLine("Conexion recibida\n");  
  25.  
  26.                   while(true){
  27.   byte[] buffer = new Byte[255];
  28.                   int rec = accepted.Receive(buffer,0,buffer.Length,0);
  29.                   string strData = Encoding.ASCII.GetString(buffer);
  30. Console.Write(">>> "+strData+"\n");
  31.                   }
  32.  
  33.             }catch {
  34.                   Console.WriteLine ("Error iniciando conexion");
  35.                   Console.ReadKey();
  36.                }
  37. }
  38. }
  39. }


Cliente

Código
  1. using System.IO;
  2. using System.Diagnostics;
  3. using System.Text;
  4. using System.Threading;
  5. using System.Runtime.InteropServices;
  6. using Microsoft.Win32;
  7. using System;
  8. using System.Net.Sockets;
  9. using System.Net;
  10.  
  11. namespace sockets{
  12. class Program{
  13.  
  14. public static void Main(string[] args){
  15.  
  16. Console.WriteLine ("Conectandose al servidor...");
  17.            Socket _S = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // Socket de tipo TCP.
  18.            IPEndPoint ep = new IPEndPoint (IPAddress.Parse ("127.0.0.1"), 1238); // Ip - Puerto
  19.  
  20.           try {
  21.                _S.Connect (ep);
  22.                    Console.WriteLine ("Conectado correctamente.\n");
  23.  
  24.                    while(true){
  25.                     Console.Write(">>> ");
  26.             string text = Console.ReadLine();
  27.             byte[] data = Encoding.ASCII.GetBytes(text);
  28.             _S.Send(data);                  
  29.                    }
  30.  
  31.           }catch(Exception ex) {
  32.                 Console.WriteLine (ex.Message);
  33.                 Console.ReadKey();
  34.                }
  35.  
  36. }
  37. }
  38. }


Vamos, solucionar el salto de línea que produce la lectura de la tecla intro.




« Última modificación: 28 Diciembre 2012, 21:21 pm por Dryken » En línea

Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html
spiritdead

Desconectado Desconectado

Mensajes: 296


Ver Perfil
Re: [C#] Evitar la lectura de la tecla intro en sockets tcp/ip
« Respuesta #1 en: 28 Diciembre 2012, 16:16 pm »

yo cambiaria esto

Console.Write(">>> "+strData+"\n");
por
COnsole.Writeline(">>> "+strData);


En línea

Facilitador De Tareas - Task Simplifier (FDT)
seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: [C#] Evitar la lectura de la tecla intro en sockets tcp/ip
« Respuesta #2 en: 28 Diciembre 2012, 16:47 pm »

no, al parecer es un problema del buffer y el string, el problema esta en el server.

en el server despues de la linea que dice "Listen", debe quedar asi el codigo para que funcione (pasalo a C#) te vas a dar cuenta de las diferencias.

Código
  1.            While True
  2.                Console.WriteLine("Esperando Conexion..." & vbLf)
  3.                Dim accepted As Socket = s.Accept()
  4.                Dim strData As String = ""
  5.  
  6.                While True
  7.                    Dim buffer As Byte() = New [Byte](254) {}
  8.                    Dim rec As Integer = accepted.Receive(buffer)
  9.                    strData += Encoding.ASCII.GetString(buffer, 0, rec)
  10.                    Console.Write(">>> " + strData & vbLf)
  11.                End While
  12.  
  13.            End While

con eso funciona.

saludos.
En línea

Dryken

Desconectado Desconectado

Mensajes: 117


El arte de vencer se aprende en las derrotas


Ver Perfil WWW
Re: [C#] Evitar la lectura de la tecla intro en sockets tcp/ip
« Respuesta #3 en: 28 Diciembre 2012, 21:21 pm »

Llevas razón seba123neo, acabo de ver tu code y la solución la he encontrado en esta línea

 
Código
  1. strData += Encoding.ASCII.GetString(buffer, 0, rec)

lo que he echo ha sido simplemnete colocar esta línea en el server para evitar los carácteres nulos

Código
  1. Array.Resize(ref buffer, rec);

y así evito leer la entrada de la tecla intro al leer. Gracias por la ayuda compañeros. Saludos!  ;)

En línea

Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
foto lectura, y lectura veloz, scanning y otros metodos de lectura rapida....
Foro Libre
Kase 3 12,666 Último mensaje 4 Febrero 2014, 08:47 am
por camilo_
¿Evitar que en la lectura de un archivo se cambien los numeros a letras?
PHP
Servia 2 1,917 Último mensaje 15 Abril 2009, 20:39 pm
por HardieVon
[BATCH]Como evitar lectura de archivos
Scripting
Segadorfelix 0 2,226 Último mensaje 5 Diciembre 2012, 00:18 am
por Segadorfelix
[BASH] Elegir opcion de un menu sin presionar tecla intro
Scripting
Hekaly 2 5,404 Último mensaje 27 Agosto 2015, 07:56 am
por Todo-System.
Evitar repetición de la pulsación de una tecla
Programación Visual Basic
adla 5 5,050 Último mensaje 21 Noviembre 2021, 13:38 pm
por adla
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines