inet_addr

Тема в разделе "WASM.NETWORKS", создана пользователем Caesarus, 3 дек 2004.

  1. Caesarus

    Caesarus New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2004
    Сообщения:
    16
    Проблема с этой ф-цией. Хочу послать датаграмму серверу примерно так:


    Код (Text):
    1.  
    2. STATSERVERADDR CHAR '127.0.0.1',0
    3.  
    4. SendStatUDP proc
    5.     LOCAL hSocket: DWORD
    6.     LOCAL hAddr: sockaddr_in
    7.     LOCAL uAddrSize: DWORD
    8.    
    9.     invoke socket, AF_INET, SOCK_DGRAM, IPPROTO_IP
    10.     mov hSocket, eax
    11.     .if (eax == INVALID_SOCKET)
    12.         return 0
    13.     .endif
    14.    
    15.     invoke htons, STATSERVERPORT
    16.     mov [hAddr.sin_port], ax       
    17.    
    18.     invoke wsprintf, addr szRemoteAddr, addr szMask1, STATSERVERADDR
    19.  
    20.     invoke inet_addr, addr szRemoteAddr
    21.     mov [hAddr.sin_addr], eax
    22.    
    23.     mov [hAddr.sin_family], AF_INET
    24.    
    25.     mov uAddrSize, sizeof hAddr
    26.    
    27.    
    28.     invoke sendto, hSocket, IPPORT_PROXY, sizeof IPPORT_PROXY, 0, addr hAddr, addr uAddrSize
    29.     invoke closesocket, hSocket
    30.    
    31.    
    32.  
    33. SendStatUDP endp
    34.  




    Но не прокатывает
    Код (Text):
    1. invoke inet_addr, addr szRemoteAddr




    Что я не правильно делаю. Подскажите плз!!!
     
  2. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Какой код ошибки?

    Уверен в правельности szRemoteAddr? Что там лежит?
     
  3. Caesarus

    Caesarus New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2004
    Сообщения:
    16
    .data

    STATSERVERADDR CHAR '127.0.0.1',0

    ...

    .data?

    szRemoteAddr db 128 dup (?)

    ...



    invoke wsprintf, addr szRemoteAddr, addr szMask1, STATSERVERADDR



    invoke inet_addr, addr szRemoteAddr





    Вот... Так почему то не прокатывает! Хотя по идее все верно... Передаю указатель на строку, содержащую dotted IP address как и полагается.... Что же тут не верно?
     
  4. Turkish

    Turkish New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    80
    Адрес:
    Russia
    Дык надо адрес строки передавать в wsprintf.

    Почему бы не передвавать STATSERVERADDR в inet_addr??
     
  5. Caesarus

    Caesarus New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2004
    Сообщения:
    16
    Вот доработанная версия процы. Все компилится но ф-ция sendto возвращает INVALID_SOCKET! В чем я тут не прав?


    Код (Text):
    1.  
    2. .data
    3. szRemoteAddr db "127.0.0.1",0
    4. ...
    5.  
    6.  
    7. SendStatUDP proc
    8.     LOCAL hSocket: DWORD
    9.     LOCAL hAddr: sockaddr_in
    10.     LOCAL uAddrSize: DWORD
    11.    
    12.     invoke socket, AF_INET, SOCK_DGRAM, IPPROTO_IP
    13.     mov hSocket, eax
    14.     .if (eax == INVALID_SOCKET)
    15.         return 0
    16.     .endif
    17.    
    18.     invoke htons, STATSERVERPORT
    19.     mov [hAddr.sin_port], ax
    20.            
    21.     invoke inet_addr, addr szRemoteAddr
    22.     .if (eax == INADDR_NONE)   
    23.         invoke MessageBox, NULL, addr szRemoteAddr, NULL, MB_OK
    24.     .endif 
    25.    
    26.     mov [hAddr.sin_addr.S_un.S_addr], eax
    27.    
    28.     mov [hAddr.sin_family], AF_INET
    29.    
    30.     mov uAddrSize, sizeof hAddr    
    31.    
    32.     invoke sendto, hSocket, IPPORT_PROXY, sizeof DWORD, 0, addr hAddr, addr uAddrSize
    33.     .if (eax == SOCKET_ERROR)  
    34.         invoke MessageBox, NULL, addr szRemoteAddr, NULL, MB_OK
    35.     .endif
    36.     invoke closesocket, hSocket
    37.      ret   
    38.  
    39. SendStatUDP endp
    40.  
     
  6. Caesarus

    Caesarus New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2004
    Сообщения:
    16
    Проблема решена. Всем спасибо.