Api winsock

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 440 fois - Téléchargée 46 fois

Contenu du snippet

Les APIs de Winsock
(ce serai plus simple avec l activeX).

Sorry ya pas de zip ...

Source / Exemple :


Declare Function Socket Lib "wsock32.dll" Alias "socket" (ByVal afinet As Integer, ByVal socktype As Integer)
Declare Function connect Lib "wsock32" (ByVal sock As Long, name As SOCK_ADDR, ByVal namelen As Integer) As Long
Declare Function bind Lib "wsock32" (ByVal sock As Long, addr As SOCK_ADDR, ByVal namelen As Long) As Long
Declare Function listen Lib "wsock32.dll" (ByVal sock As Long, ByVal backlog As Integer) As Integer
Declare Function send Lib "wsock32" (ByVal sock As Long, buffer As Any, ByVal length As Long, ByVal flags As Long) As Long
Declare Function recv Lib "wsock32" (ByVal sock As Long, buffer As Any, ByVal length As Long, ByVal flags As Long) As Long
    Type IN_ADDR
        S_addr As Long
    End Type
    Type SOCK_ADDR
        sin_family As Integer
        sin_port As Integer
        sin_addr As IN_ADDR
        sin_zero(0 To 7) As Byte
    End Type
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
'module
Public Const PF_INET = 2
Public Const SOCK_STREAM = 1
Public Const SOCK_DGRAM = 2
Public Const IPPROTO_IP = 0
Public Const IPPROTO_TCP = 6
Public Const IPPROTO_UDP = 17
Public Const INVALID_SOCKET = -1
Public Const SOCKET_ERROR = -1
Public Const INADDR_ANY = &H0
Public Const SOCKET_ERROR = -1
Public Const MSG_OOB = &H1
Public Const MSG_DONTROUTE = &H4
Public Const MSG_OOB = &H1
Public Const MSG_PEEK = &H2
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

'connecter

Dim CR As Long
Dim sock As Long
Dim RemoteServer As SOCK_ADDR

RemoteServer.sin_family = AF_INET
RemoteServer.sin_port = htons(2000)
RemoteServer.sin_addr.S_addr = inet_addr("XXX.XXX.XXX.XXX")
RemoteServer.sin_zero(0) = 0
CR = connect(sock, RemoteServer, Len(RemoteServer))

'Création d 'un socket

Dim sock As Long
 
sock = Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)

'Port

Dim CR As Long
Dim LocalServer As SOCK_ADDR

LocalServer.sin_family = AF_INET
LocalServer.sin_port = 0
LocalServer.sin_addr.S_addr = INADDR_ANY

CR = bind(sock, LocalServer, Len(LocalServer))

'listen

Dim CR As Long
Dim sock As Long

CR = listen(sock, 1)

'Envoyer
 
Dim CR As Long
Dim longSend As Long

longSend = Len(chaine)
ReDim buff(longSend + 1) As Byte

For i = 1 To longSend
    buff(i - 1) = Asc(Mid(chaine, i, 1))
Next
buff(longSend) = 0

CR = send(sock, buff(0), longSend, 0)

'recevoir

Const MAX_BUFF_SIZE = 10000
Dim buff(0 To MAX_BUFF_SIZE) As Byte
Dim sock As Long
Dim CR As Long

CR = recv(sock, buff(0), MAX_BUFF_SIZE, 0)

'Fermer un socket

Dim Result As Long
Dim sock As Long
     
Result = closesocket(sock)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
5
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
1 avril 2004

Bonjour,


Je pose le décor : je veux faire de la communication entre un PC et un automate sous une couche TCP IP.

Pour ce faire, j'utilise l'API de windows (wsock32.dll) car je ne veux pas utiliser le contrôle winsock OCX, j'ai bien compris qu'il fallait :

1) initialiser la dll avec
Declare Function WSAStartup Lib "wsock32" _
(ByVal wVersionRequired As Integer, _
wsData As WSA_DATA) As Long

2) créer le socket avec
Declare Function Socket Lib "wsock32.dll" Alias "socket" _
(ByVal afinet As Integer, _
ByVal socktype As Integer, _
ByVal protocol As Integer) As Long

3) connecter le socket avec
Declare Function connect Lib "wsock32" _
(ByVal sock As Long, _
name As SOCK_ADDR, _
ByVal namelen As Integer) As Long

4) Envoyer un message sur le pc distant avec
Declare Function send Lib "wsock32" _
(ByVal sock As Long, _
buffer As Any, _
ByVal length As Long, _
ByVal flags As Long) As Long


Mais c'est maintenant que ça se complique, car avec le "client" crée ci dessus, je voudrais créer un évènement lors d'une réception d'un message par le serveur sur lequel je suis connecté.
Je crois avoir compris (mais là, je suis moins sur) que :

1) on peut analyser les évènemtns qui affectent un socket avec :
Declare Function WSAAsyncSelect Lib "wsock32.dll" _
(ByVal sock As Long, _
ByVal hwnd As Long, _
ByVal wMsg As Integer, _
ByVal lEvent As Long) As Integer
mais je ne sais pas trop m'en servir, à cause de hwnd.

2) on lit le message du socket reçu avec :
Declare Function recv Lib "wsock32" _
(ByVal sock As Long, _
buffer As Any, _
ByVal length As Long, _
ByVal flags As Long) As Long


Mon problème est donc le suivant :
comment avoir un évènement (du type "Data_arrival" du contrôle winsock) qui me réveille afin que je puisse utiliser ma fonction recv pour lire dans mon socket.


Merci pour le Share ;)
Je suis automaticien et pas informaticien, soyez indulgent ;)
Messages postés
50
Date d'inscription
samedi 1 septembre 2001
Statut
Membre
Dernière intervention
20 septembre 2006

c'est nul,il manque des APIs en plus,et tu aurais au moins pu mettre des fonctions plutôt que de simplement copier le code qui se trouve ici : http://vbasicsite.free.fr/ApiWinsock.htm
Messages postés
3
Date d'inscription
lundi 15 septembre 2003
Statut
Membre
Dernière intervention
19 septembre 2003

L'API devient importante quand par example on souhaite créer une DLL qui exploite WinSock. Si on utilise l'ocx winsock dans une dll. On obtient des problèmes lors de l'utilisation de cette dll dans plusieurs thread ! Problème de Pile.

voir : http://www.vbfrance.com/code.aspx?ID=8101
Messages postés
962
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
2 août 2010

Pi pour les trojan c'est parfais,mais est-ce que la dll winsock vient avec toute les version de windows?
Et puis est-ce que la dll est plus légère que l'ocx?
Messages postés
95
Date d'inscription
lundi 28 janvier 2002
Statut
Membre
Dernière intervention
21 février 2008

on fait des économies d'espace car on a pas besoin de j'oindre l'ocx winsock avec nos projets...
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.