Fecha y hora actual: Martes 13 Nov 2018 23:57
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

TCP_SERVER y aperturas de Sockets.

Responder al Tema

Índice del Foro > C, C#, Visual C++ > TCP_SERVER y aperturas de Sockets.

Autor Mensaje
BELLOTO_



Registrado: 24 May 2017
Mensajes: 2

Mensaje Publicado: Miércoles 24 May 2017 16:53

Título del mensaje: TCP_SERVER y aperturas de Sockets.

Responder citando

Hola a todos, gracias por adelantado y ya aprovecho esto como presentación.

Trabajo en el sector de la domótica, y estudié en su día algo de programación. Actualmente trabajo con sistemas que tienen parte de código, muy parecido al C, y programamos pequeños módulos de interconexión con aparatos varios, incluso con otros sistemas del entorno.

Os cuento esto para que sepáis que no parte de 0, pero los lenguajes orientados a objetos nunca los estudié con ganas, y ahora tengo ciertos problemilllas.

Estoy programando en C# un software que sea capaz de establecerse como servidor TCP a la espera de clientes. Estos clientes envían cadenas de Texto que mi servidor lee en alto con ayuda de la librería Synthetizer de C#.

Lo tengo hecho, pero tengo problemas con los SOCKETS. Lo estoy probando haciéndole todo tipo de perrerías: conectando, desconectando, haciendo como que se va la luz, ... Y cuando desconecto un par de veces mi cliente sin previo aviso, el programa peta.

Me gustaría que me ayudaseis, necesito hacer un bucle que se quede a la espera, y si llega una cadena la lea. Si se produce cualquier anomalía en la conexión, que cierre y abra de nuevo o al menos quede a la espera de una nueva conexión.


Este es mi código:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Data.SqlClient;
using System.Speech.Synthesis;

namespace TCP_SERVER
{
class TCP_SERVER
{

static void opensocket(TcpListener TCP, SpeechSynthesizer V)
{
int c = 1;
string cadena = "";

Socket s = TCP.AcceptSocket();
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("Socket abierto. Conectado equipo: " + s.RemoteEndPoint);

while (c == 1)
{

byte[] b = new byte[100];
int k = s.Receive(b);
Console.Write("Recibido...:");
for (int i = 0; i < k; i++)
{
cadena = cadena + Convert.ToChar(b[i]);
}
Console.Write(cadena);
V.Speak(cadena);
cadena = "";

Console.WriteLine("");
Console.WriteLine("");

ASCIIEncoding asen = new ASCIIEncoding();
s.Send(asen.GetBytes("ACK"));
Console.WriteLine("\nEnviada confirmación a cliente");
//s.Close();
}

}

static void Main(string[] args)
{

SpeechSynthesizer VOZ = new SpeechSynthesizer();
VOZ.Rate = -2;
VOZ.Volume = 100;

Console.WriteLine("Voces disponibles:");
foreach (InstalledVoice VOCES in VOZ.GetInstalledVoices())
{
Console.WriteLine(VOCES.VoiceInfo.Name);
}


TcpListener SERVER = new TcpListener(IPAddress.Any, 8010);
SERVER.Start();

Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("Servicio iniciado en puerto: 8010...");
Console.WriteLine("Esperando conexión...");

try
{
TCP_SERVER.opensocket(SERVER, VOZ);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.StackTrace);
TCP_SERVER.opensocket(SERVER, VOZ);
}
}


}
}

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Pedrolo
Usuario Inquieto


Registrado: 07 May 2017
Mensajes: 50
Ubicación: Posiblemente lejos de ti

Mensaje Publicado: Sábado 27 May 2017 01:48

Título del mensaje: TCP_SERVER y aperturas de Sockets.

Responder citando

Aparte de la POO creo que también desconoces el funcionamientos del Socket...

Cuando se crea una conexión cliente-servidor, que parece que es el caso que presentas, el cliente que podría ser tú microcontrolador (a lo mejor Arduino), este tiene que ponerse en contacto con tú servidor por medio de una IP. Y en el otro lado el servidor, en teoría, debería estar escuchando (Listen) por un puerto determinado. En la escucha hasta que no llegue una petición, el socket no se mueve de ahí, el programa en teoría queda suspendido y no continúa hasta que eso suceda.

Problemas comunes que surgen en una conexión cliente-servidor; cuando se trata de una conexión local no suele haber problemas pero cuando la conexión se hace desde fuera, casi siempre la causa de que no llegue la petición es por tener los puertos del router capado, y otro problema muy de novatos es intentar ponerse en contacto con el servidor con la Ip local y no por medio de la Ip pública.

No se suelen usar bucles en el programa cuando se usan Sockets por eso mismo, porque la aplicación estaría constantemente suspendida, por lo que el bucle del Socket lo normal es meterlo en un hilo que corra junto al programa.

En resumen, no es cuestión de tener conocimientos de POO, sino conocimientos sobre programación con hilos y conexiones de red cliente-servidor.

Volver arriba
Ver perfil del usuario Enviar mensaje privado Visitar sitio web del autor
BELLOTO_



Registrado: 24 May 2017
Mensajes: 2

Mensaje Publicado: Sábado 27 May 2017 20:44

Título del mensaje: TCP_SERVER y aperturas de Sockets.

Responder citando

Gracias por contestar. Ya lo conseguí, pero con TCPCLIENT.

Saludos.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Consulta sobre Sockets - Cliente Servidor

Dante Uechi Java 2 Martes 18 Oct 2016 01:37 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Cliente Servidor Sockets TCP Java

osmar7v Java 0 Lunes 08 Dic 2014 15:41 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Ayuda con sockets y conexion TCP/IP

jaime torres Visual Basic .NET 2 Lunes 06 Oct 2014 22:48 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Sockets en JApplet

Elemerito Java 0 Sábado 09 Mar 2013 17:48 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Como crear un programa de chat usando sockets?

noob.9412 C, C#, Visual C++ 11 Sábado 18 Ago 2012 04:07 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,