Título: Edit Server ,Server Builder vb.Net Publicado por: Robokop en 14 Julio 2006, 02:21 am Editores de server y server builder En esta mini guía voy a explicar o mas bien a dar ideas para crear editores de Server y generadores de Server para sus proyectos Cliente-Servidor.Estos editores ayudan haciendo ver un poco mas profesional el trabajo realizado, aquí se va a usar la versión visual basic.Net 2005 Profesional , pero la Express servirá perfectamente Todas estas ideas las saque de métodos que se usaban en VB6 ya notaran que son parecidas ,las ideas originales las saque de la versión 6 no son mías pero de la .Net si . Empezamos creando un proyecto grafico con 2 textbox y un commandButton. Eso es para el editor (http://img147.imageshack.us/img147/5565/ss7em.jpg) Algo así mas o menos debemos de dejar. Luego ustedes podrán añadir mas opciones de mientras dejaremos esas para el ejemplo. Creamos otro proyecto al que llamaremos Server ,igual que el anterior colocamos 2 textbox pero esta vez sin el comandButton. Para poderlo editar perfectamente sin que se dañe el server , tenemos que abrirlo de forma binaria y colocar los datos hasta el Final del archivo. Después cuando en el server debemos de leernos en forma binaria para obtener los datos. Comencemos con el Edtor: Primero importamos el nameSpace IO para poder trabajar con flujos de entrada y salida y de forma binaria. Después en el form dentro del evento on click del commandButton colocamos este code: Código: Imports System.IO Primero declaramos Fs como flujo de entrada y salida. Bw lo declaramos para poder escribir en forma binaria la declaración binaryWriter nos permite eso. Directorio es el lugar donde se encuentra el server. Aquí: Código: fs = New FileStream(directorio, FileMode.Append, FileAccess.Write) Citar Dim puerto As String = TextBox1.Text Declaramos el valor de puerto y pass corresponden a las cajas de texto.Dim pass As String = TextBox2.Text Citar Dim i As Integer Esta parte es muy importante y de aquí depende su funcionamiento:For i = puerto.Length + 1 To 5 puerto = " " + puerto Next Tenemos que tener contados y separados los caracteres para que cuando programemos el servidor no coma datos que no pertenecen por eso debemos de dejar un espacio predefinido. Aquí estamos dejando un espacio para 5 caracteres, si no pusiéramos este código tendríamos que colocar exactamente 5 caracteres para que no diera error , así que esta parte nos permite poner cualquier cantidad entre 0 y 5 en cada caja de texto , si escribimos demás también nos dará un error para ello debemos de aumentar la cantidad. Asi que contamos la longitud de la variable puerto y la llevamos hasta 5 aumentado un espacio atras de la variable para que no de error , posteriormente quitaremos esos espacios en el server. Código: Dim a As Integer Código: bw.Write(puerto & "\" & pass) y cerramos los flujos. Código: Catch ex As IOException SERVER En el server ira el siguiente codigo: Citar Imports System.IO Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim br As BinaryReader '//Declaramos variable para abrir como binario// Dim nombre As String = "server.exe" '//fila a abrir Dim fs As FileStream '/Variable para flujo de entrada fs = New FileStream(nombre, FileMode.Open, FileAccess.Read) '/Condiciones flujo de entrada br = New BinaryReader(fs) '//Declaramos en binary reader condiciones de fs Dim puerto As String 'Variable en donde se almacena la info br.BaseStream.Seek(-12, SeekOrigin.End) 'nos pocicionamos al final menos 12 puerto = br.ReadString '//Leemos 12 caracteres que equivale a 5 en un lado y 5 en otro 'Se desperdicia -1 asi que para 10 seria -11 pero mas el "\". Dim lugar As Integer '//Lugar donde se encuentra el punto clave a separar. lugar = InStr(puerto, "\") 'Buscamos el punto clave y almacenamos su poscicion en lugar. Dim str2 As String 'Declaramos una variable para partir la original. str2 = puerto.Substring(lugar) 'La partimos desde el punto clave Dim str As String str = puerto.Remove(lugar - 1) 'Almacenamos en str lo removido despues del punto clave -1_ 'ese menos 1 es del "\"(la diagonal) TextBox1.Text = str.Trim 'Quitamos espacios TextBox2.Text = str2.Trim fs.Close() : br.Close() 'Cerramos los flujos. End Sub End Class Aqui ya tiene comentarios asi que solamente detallo las partes imporantes: Citar br.BaseStream.Seek(-12, SeekOrigin.End) aqui usamos el objeto br y la propiedad baseStream para poder acceder a seek , en accesos aleatorios podemos usar Seek directamente pero como estamos en binario nos basamos de baseStream para abrirlo.puerto = br.ReadString Dim lugar As Integer lugar = InStr(puerto, "\") Seek nos permite posicionarnos en cualquier parte de un fichero SeekOrigin.End nos permite colocarnos al final del archivo es -12 porque: 5+5 de los datos de las cajas de texto van 10 , + 1 de la diagonal (“\”) y menos 1 que siempre se debe de restar ese uno y van 12, si quisiéramos que el usuario pudiera introducir 6 caracteres en cada caja tendríamos que poner -14 en lugar de -12 y así sucesivamente dependiendo de las necesidades del programa. Recuerden que si van a aumentar aquí tendrían que hacerlo también en el servidor para registrar mas espacios en caso que no se completaran los caracteres. y fin del editor de server ahora ya podemos hacer las pruebas. Constructor del server Este nos permite generar el servidor a partir del ejecutable .El codigo del editor esta vez sería así: Código: Imports System.IO Lo que cambia es que en la propiedad del click llamamos a serverBuild antes y creamos un nuevo subprocedimiento que es el que llamamos : Citar FileOpen(1, My.Application.Info.DirectoryPath & "\" & My.Application.Info.AssemblyName & ".exe", OpenMode.Binary, OpenAccess.Read) Nos abrimos a nostros mismos , el 1 es un identificador como #1 que declarabas en visual basic y nos abrimos en modo binario para leer.Citar cliente = Space(LOF(1) - 28672) Almacenamos en cliente el espacio que resta despues de 28672 bits que es el peso del server, para saberlo , antes compilamos el server , vamos a propiedades y vemos el peso ese peso lo remplazamos por 28672 , LOF(1) nos permite llegar al final de un archivo.server = Space(28672) Despues hacemos lo mismo con server pero esta vez el espacio restante que es lo que pesa el. Código: FileOpen(2, My.Application.Info.DirectoryPath & "\" & "server.exe", OpenMode.Binary) En el server es el mismo codigo y la misma explicación. Ahora para poder generar un solo ejecutable tenemos que descargar un editor hexadecimal(Por cierto quiero dar un parentesis para agradecer a WarGhost que el me dio la idea del generador del server en Visual Basic 6 yo la pase al .Net para ayudar a los que han cambiado a este lenguaje). El editor hexadecimal es para pegar los datos del server y el cliente , para dejar uno solo. Primero debemos de dejar los datos del Cliente y luego los del server , así que abrimos con el editor el Server y copiamos todos sus datos . Luego abrimos el editor y nos vamos hasta al final hasta el ultimo cero que haya y lo pegamos . Por ultimo guardamos lo editado con extensión .exe y listo ya lo tenemos. Creo que no van a quedar tantas dudas pues lo explique muy especificamente , pero cualquier cosa dila . Seguro que con esto van a surgir nuevas ideas , que van a acortar muchisimo mas el codigo y lo van a hacer un poco mas facíl eso ya esta en su imaginación. Por si se llegaran a presetar dificultades dejo los proyectos , junto con el ServerBuilder ya Compilado http://mx.geocities.com/esteban_7_21/ProyectoNet.zip Salu2 Título: Re: Edit Server ,Server Builder vb.Net Publicado por: songless en 15 Julio 2006, 18:47 pm Leyendo el código... es imposible saber que hace el programa. Estás haciendo un programa que modifica otro, un joiner, un...
Pero reconozco que lo que más me ha interesado es cuando dices que con un editor hexadecimal pegas cliente y servidor en un ejecutable. ¿ COMOR ? Eso suena sugerente :) Título: Re: Edit Server ,Server Builder vb.Net Publicado por: Robokop en 15 Julio 2006, 19:03 pm El programa lo que hace es la funcion de un editor de un server como en los troyanos , que en lugar de configurar un puerto predeterminado para la conexion dejas que otra la aplicacion lo decida ya que se supone que el servidor no debe de interactuar para que se configure en la otra computadora .
Lo del editor hexadecimal , es para generar una aplicacion idependiente de otra pero en una sola , asi que lo que tienes que hacer con el editor es colocar los datos del server al final del cliente y guardarlo como ejecutable entonces con el codigo que coloque lo va a generar. Citar Leyendo el código... es imposible saber que hace el programa. Para eso esta la explicacion.Si no comprendes el funcionamiento baja el proyecto dentro viene el generador del server para que veas como funciona. Editado , note que al tener que recojer muchos datos era muy laborioso y problematico asi que estuve buscando en muchos NameSpaces para encontrar otro método mucho mas facil y corto. Edit Server 2 (Mas Fácil y corto) Cliente Antes en el cliente teniamos que implementar una funcion para añadir espacios antes pero ya no porque Ahora vamos a prefedinir esa longitud sin caracteres el codigo es : Código: Imports Microsoft.VisualBasic.Compatibility En este se va a editar el server cuando se haca click en el botón Código: Dim port As New VB6.FixedLengthString(5) port es de 5 caracteres y pass de 20. Con este codigo si el usuario escribe de mas no pasa nada ya que elimina los caracteres restantes automaticamente. Código: port.Value = TextBox1.Text Código: FileOpen(1, "Server.exe", OpenMode.Binary) Código: FilePut(1, port.Value, LOF(1) + 1) Código: FileClose(1) Server Código: Public Class Form1 Código: Dim port As New VB6.FixedLengthString(5) Código: FileOpen(1, My.Application.Info.AssemblyName & ".exe", OpenMode.Binary, OpenAccess.Read) Código: FileGet(1, port.Value, LOF(1) - 24) Código: FileGet(1, pass.Value) Se delimita gracias a los valores que apartamos en las declaraciones. Código: FileClose(1) Descarga de proyecto: Aqui (http://mx.geocities.com/esteban_7_21/edit11.zip) Título: Re: Edit Server ,Server Builder vb.Net Publicado por: surfrio en 25 Junio 2007, 22:13 pm como seria esse código em vb6?
|