[Tutorial] Sockets en C#

Iniciado por Hendrix, 26 Mayo 2007, 16:20 PM

0 Miembros y 1 Visitante están viendo este tema.

Hendrix

No lo tengo ya que formatee...pero es simplemente agregar ese codigo al que de ta por defecto el IDE del C#.
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

lokidelinfierno

hendri me podrias decir como puedo aplicar sokets en los formularios de windows, q simplemente no lo cacho bien a los codigos, ay porfa si me puedes brindar un codigo con un ejemplo sencillo para resivir un mensaje en un label(o lo q cayga) desde otra pc q envia el mensaje de una text box :laugh:

Meta

Hola:

Tengo la idea de hacer dos programas en cada PC controlado mediante Internet y puerto serie.

1- EL PC1 hago la Interfaz de control para controlar por vía Internet mediante button (botones) el otro programa del PC que ahí está el PIC16F84A.

2- El PC2 tiene otro programa o Interfaz que puede controlar el puerto serie donde está conectado el PIC. Se controla como puedes ver en este vídeo...

http://www.youtube.com/watch?v=niWAbQ-HVnY

...con la diferencia que yo lo quiero hacer mediante control por IP y que ustedes sean capaces de controlarlo desde sus casas mientras ves como se mueve una webcam por poner un ejemplo.

Ahora la pregunta. ¿Con Visual C# se puede hacer esto?

Aquí hay un ejemplo directo de una Interfaz básico con su código fuente, conectado al puerto serie. En realidad esta Interfaz no tiene que ir con el puerto serie, sólo la conexión a Internet mediante una IP que debemos conocer para poder llegar al PC2 que si se puede conectar al puerto serie.

Las órdenes a enviar al PC2 para el puerto serie es algo parecido a esto.

Código (csharp) [Seleccionar]

            byte[] mBuffer = new byte[1]; 
            mBuffer[0] = 0x20; //ASCII letra "Espacio". 
            serialPort1.Write(mBuffer, 0, mBuffer.Length);







Necesito información y cómo se programa. Poco a poco lo intentaré, al menos como se envía esta trama de bytes en hex para que lo entienda el PC2 desde el PC1. De momento sigo buscando en www.google.com

¿Sugerencias?

Un cordial saludo.

Fuente:
http://foro.elhacker.net/net/controlar_pc_desde_otro_pc-t248849.0.html
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

gemanet

te hago una consulta, yo implemente tu rutina de cliente servidor, lo unico que mantengo la conexion al server no la cierro ya que el cliente esta consultando permanentemente.

la cuestion es la siguiente: luego de muchas consultas simultaneas desde varios clientes, la aplicacion deja de recibir peticiones y no encuentro el motivo o causa de este problema. tuviste alguna dificultad en un ambiente de muchas pc's consultando simultaneamente?

Novlucker

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Erik#

El código completo quedaría algo así:

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace Sockets
{
    class Program
    {
        static void Main(string[] args)
        {
            IPAddress direc = Dns.GetHostEntry("localhost").AddressList[0];
            IPEndPoint Ep = new IPEndPoint(direc, 12345);
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Bind(Ep);
            socket.Listen(100);
            Socket handler = socket.Accept();
            byte[] bytes = new byte[1024]; // array 1024 (t.byte)
            int count;
            String data = ""; // datos alm.
            do
            {
                count = handler.Receive(bytes);
                data = System.Text.Encoding.ASCII.GetString(bytes, 0, count);
                if (data != "exit\n")
                {
                    Console.Write("{0}", data);
                }
            } while (data != "exit\n");
            Console.WriteLine("Conexion finalizada");
            byte[] msg = System.Text.Encoding.ASCII.GetBytes("\n\nFinalizada conexion");
            handler.Send(msg);
            handler.Shutdown(SocketShutdown.Both);
            handler.Close();
        }
    }
}

zerow

Falta lo más importante!!!!!!

En el código de ejemplo no se cierra el socket , dando paso libre a agujeros de seguridad y posibles errores en futuras conexiones!!!


Para ello al final del codigo y dentro de la exception
socket.close();

Meta

Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

TheGhost(Z)

Hola stoy usando el sSocket con WindosFors de VB.NET
y este es el codigo que recibe datos de un cliente:


Dim TCPListen As New TcpListener(IPAddress.Any, 11000)
        TCPListen.Start()

        While Not TCPListen.Pending()
            Thread.Sleep(5000)
        End While

        Dim TCP As TcpClient = TCPListen.AcceptTcpClient()
        Dim NetStream As NetworkStream = TCP.GetStream()


        Dim i As Int32
        Dim bytes(1024) As Byte
        Dim data As String = ""

        i = NetStream.Read(bytes, 0, bytes.Length)
        While (i <> 0)
            data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)
            i = NetStream.Read(bytes, 0, bytes.Length)
        End While

        MsgBox(data)
        NetStream.Close()
        TCP.Close()

TomaSs

Alguien de ustedes abría decirme porque me da este error al ejecutar el código???


Gracias por el trabajo Hendrix! ;)