IPB

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topicStart Poll

Outline · [ Standard ] · Linear+

> Winsock

SuNcO
post Dec 28 2006, 04:36 AM
Post #1


Administrador
*****

Group: Admin
Posts: 624
Joined: 21-October 05
Member No.: 1



Como ya esta la seccion de Tutoriales, ahora si ya no hay excusa para no hacer este tutorial que es el que mas me piden

Vamos a crear un Servidor, esto es, un programita que reciba las conexiones e interactue con los Clientes. Es como un navegador de internet que interactua con el servidor de paginas web

Nos vamos a lmenu Proyecto y luego Componentes (tambien con ctrl + t funciona)

Elegimos el que dice : Microsoft Winsock 6.0

Ahora ponemos un Control y movemos estas propiedades

Nombre : Servidor
LocalPort : 1010 (esta la podemos poner por codigo tambien)

La propiedad LocalPort nos sirve para indicar por cual puerto van a entrar la conexiones. Es como por ejemplo cuando te conectas a una pagina de internet, no nos damos cuenta pero en realidad se conecta al puerto 80

Ahora ocupamos abrir ese puerto. Ponemos en algun boton o el evento Load del formulario

Servidor.Listen

Ahora abrirmos otra ventana de Visual Basic donde haremos el Cliente

Movemos estas propiedades (pueden moverse mediante codigo tambien)

Nombre : Cliente
RemoteHost : localhost (significa que es la pc local)
RemotePort : 1010

Mediante un boton hacemos la conexion con el Servidor

Cliente.Connect

En el Servidor se dispara el evento ConnectionRequest que significa que alguien quiere conectarse. Cerramos la conexion y a la vez aceptamos la conexion

Servidor.Close
Servidor.Accept requestID


Y en el Cliente se dispara el evento Connect

Para enviar datos del Cliente al Servidor ponemos un TextBox (Mensaje) y un boton (btnEnviar). En el evento Click del boton ponemos

Cliente.SendData Mensaje

Al hacer esto, en el Servidor se dispara el evento DataArrival. Para leer estos datos entrantes ponemos

Servidor.GetData datos

Los datos quedan guardados en la variable "datos"

Lo mismo podemos hacer para enviar datos del Servidor al Cliente

Que otros eventos nos interesan ?

Close : cuando se cierra la conexion
Error : cuando hay algun error en la conexion
SendComplete : cuando terminas de enviar datos
SendProgress : cuando se estan enviando datos. En este evento puedes ver cuandos bytes has enviado y cuantos faltan de enviarse


Propiedades ?

State : para saber el estado del Socket (lo podemos poner en un Timer y un Label)

Para entender un poco mejor pongo los 2 Proyectos totalmente explicados, el cliente y el servidor

Attached File  cliente.zip ( 2.36k ) Number of downloads: 530
Attached File  servidor.zip ( 2.1k ) Number of downloads: 425


Proximamente pondre otro que permite tener varios clientes conectados al servidor
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Mateus
post May 17 2007, 07:46 PM
Post #2


Nuevo
*

Group: Members
Posts: 1
Joined: 17-May 07
Member No.: 497



Oye te habla Mateus, te felicito por el codigo, es muy practico y funcional, pero aprovecho para hacerte otra pregunta, o duda, estuve tratando de enviar un archivo, agregando un common dialog y lo demas, pero al parecer necesito mucho mas que eso, porque al otro lado aparece como si hubiera enviado un mensaje, quisiera que me colabores para poder enviar archivos por aqui...
De antemano, te agradezco la colaboracion...
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
SuNcO
post May 17 2007, 08:18 PM
Post #3


Administrador
*****

Group: Admin
Posts: 624
Joined: 21-October 05
Member No.: 1



Mateus, para lo que quiere shacer (enviar un archivo por winsock), en la web tenemos un codigo que hace precisamente eso

El url es :

http://www.codigoplus.com/index.php?accion...ock&categoria=1
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Azakur4
post May 17 2007, 08:55 PM
Post #4


Nuevo
*

Group: Members
Posts: 9
Joined: 28-February 06
Member No.: 133



uh interesante eso de enviar archivos por el winsock yo ya e estado aprendiendo de como hacer aplicaciones cliente servidor en .net usando la clase socket y thread me seria util si postean el codigo del envio de archivos por sockets para ver si lo puedo hacer en .net

por lo pronto posteare el codigo de cliente/servidor en .net hoy o maņana para los ke kieran aprender como se hace ya que en .net no se usa el winsock.

ah PD: pido que posteen el codigo de como enviar archivos por el winsock debido a que no tengo vb6 tongue.gif

This post has been edited by Azakur4: May 17 2007, 08:56 PM
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
SuNcO
post May 19 2007, 11:31 PM
Post #5


Administrador
*****

Group: Admin
Posts: 624
Joined: 21-October 05
Member No.: 1



El codigo de envio y recepcion de archivo es bastante sencillo

Primero hay que enviar un indicativo de que vamos a enviar un archivo y algunos datos extra.. por SendData enviamos :

Sock1.SendData "|Archivo|" & FileLen("archivo.mp3") & "|archivo.mp3"

Cuando la contraparte nos responda con algun comando, entonces ya podemos enviar el archivo

CODE

Dim tamaņo As Long
Dim imagen() As Byte

Open "archivo.mp3" For Binary Access Read As #1
tamaņo = LOF(1)
ReDim imagen(tamaņo - 1)
Get #1, , imagen
Close
 
Sock1.SendData imagen


Para recibirlo (en el evento DataArrival)

CODE

 Dim imagen() As Byte

If Recibiendo = "no" Then
  Sock2.GetData Datos, vbString
  If Mid(Datos, 1, 9) = "|Archivo|" Then
    ' Indicadores
    Recibiendo = "si"
    TotalRecibido = 0
    ' Ver cuanto mide
    separa = Split(Datos, "|")
    CuantoMide = separa(2)
    ' Indicarle que comienze el envio
    Sock2.SendData "|Ok|"
    ' Abrir en c:\ un archivo para guardarlo (que el archivo se llame igual pero que comienze con el caracter _)
    Open "c:\_" & separa(3) For Binary As #1
  End If
End If

If Recibiendo = "si" Then
  ' Ir aumentando el contador
  TotalRecibido = TotalRecibido + bytesTotal
     
  Sock2.GetData imagen
       
  ' Guardar los Datos recibidos
  Put #1, , imagen
 
  ' Ver si ya termino
  If TotalRecibido >= CuantoMide Then
   ' Cerrar el archivo
   Close #1
   Recibiendo = "no"
   TotalRecibido = 0
   ' Mostrar mensaje
   MsgBox "Archivo completo"
  End If
End If
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicTopic OptionsStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:
 

Lo-Fi Version Time is now: 7th January 2009 - 12:56 PM