Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: fary en 4 Agosto 2010, 00:59 am



Título: Ayuda apis winsock
Publicado por: fary en 4 Agosto 2010, 00:59 am
Holas a todos... estoy intentando hacer un servidor usando las api de winsock, pero me falla la api Bind.... nose que estoy haciendo mal ya que lo e revisado unas 10 o 12 veces y nose que podra estar sucediendo, haber si usatedes lo saben, codigo:

Código
  1. Option Explicit
  2.  
  3. Private Declare Function WSAStartup Lib "WSOCK32" (ByVal wVersionRequired As Long, lpWSADATA As WSAData) As Long
  4. Private Declare Function socket Lib "wsock32.dll" (ByVal af As Long, ByVal s_type As Long, ByVal protocol As Long) As Long
  5. Private Declare Function htons Lib "wsock32.dll" (ByVal hostshort As Long) As Integer
  6. Private Declare Function Bind Lib "wsock32.dll" Alias "bind" (ByVal s As Long, ByRef name As sockaddr, ByVal namelen As Long) As Long
  7.  
  8. Private Const MAX_WSADescription = 256
  9. Private Const MAX_WSASYSStatus = 128
  10. Private Const WS_VERSION_REQD As Long = &H101
  11. Private Const AF_INET As Long = 2
  12. Private Const SOCK_STREAM As Long = 1
  13. Private Const IPPROTO_TCP As Long = 6
  14. Private Const INADDR_ANY As Long = &H0
  15.  
  16. Private Type sockaddr
  17.    sin_family As Integer
  18.    sin_port As Integer
  19.    sin_addr As Long
  20.    sin_zero As String * 8
  21. End Type
  22.  
  23. Private Type WSAData
  24.    wVersion As Integer
  25.    wHighVersion As Integer
  26.    szDescription(0 To MAX_WSADescription) As Byte
  27.    szSystemStatus(0 To MAX_WSASYSStatus) As Byte
  28.    wMaxSockets As Integer
  29.    wMaxUDPDG As Integer
  30.    dwVendorInfo As Long
  31. End Type
  32.  
  33. Public Function Dsocket() As Boolean
  34.    Dim IniciarSocket As Integer
  35.    Dim WSAS As WSAData
  36.    Dim sock As Integer
  37.    Dim sa As sockaddr
  38.  
  39.    IniciarSocket = WSAStartup(WS_VERSION_REQD, WSAS)
  40.    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
  41.  
  42.    sa.sin_family = AF_INET
  43.    sa.sin_addr = INADDR_ANY
  44.    sa.sin_port = htons(22233)
  45.  
  46.    If (Bind(sock, sa, LenB(sa)) = -1) Then
  47.        MsgBox "error": Exit Function
  48.    End If
  49.  
  50.  
  51.    Exit Function
  52. error:
  53.    Exit Function
  54. End Function
  55.  
  56.  
  57. Private Sub form_load()
  58.     Dsocket
  59. End Sub


salu2! y esperando respuesta.




Título: Re: Ayuda apis winsock
Publicado por: LeandroA en 4 Agosto 2010, 05:26 am
hola yo por lo que veo funciona, el problema es que no cierras la sesión y al ejecutarlo por segunda vez te da el error.
 
Código:
closesocket sock

pero bueno deberias declarar sock en el general ya que no tiene sentido cerrarlo dentro de la misma subrutina.


Cita de: MSDN
The bind function associates a local address with a socket.

Saludos


Título: Re: Ayuda apis winsock
Publicado por: fary en 4 Agosto 2010, 12:44 pm
Um.... no me imaginaba que fuera por eso.. jeje eske es la primera vez que uso estas api  jejej

muchas gracias de nuevo LeandroA.

salu2!