Winsock Server, IRC et MultiThreading

CreaTiXCalimero Messages postés 2 Date d'inscription mercredi 18 octobre 2000 Statut Membre Dernière intervention 6 avril 2002 - 6 avril 2002 à 14:31
kriterkriter Messages postés 1 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 11 février 2009 - 11 févr. 2009 à 04:42
Bonjour à tous,

Je vous expose mon problème. Si l'un d'entre vous y voit quelquechose qu'il a déjà rencontré, ca m'aiderait beaucoup :)

Je fais actuellement un bot IRC en VB dont la raison d'être est le partage de fichiers via DCC. Le bot annonce régulièrement des fichiers sur le canal que les utilisateurs peuvent demander en tapant !get , auquel cas le bot le leur envoie. Tout marche très bien, à l'exception près que le bot n'arrive pas à gérer plusieurs transferts simultanéments (un nouveau transfert entraine l'abandon par le bot des précédents qui finissent en timeout).

Il faut préciser que les connexions s'établissent toutes comme il le faut sur la winsock server ( DCC index 0 ) et que les winsock acceptant les connexions (DCC index i ) sont toutes uniques et créées à l'aide de Load().

Voilà, quelqu'un a une idée ? :p

// CreaTiX ! //
-- http://creatixnet.com --

7 réponses

ShanaBurns Messages postés 30 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 30 mai 2003
6 avril 2002 à 19:24
J'ai rencontrer un probleme similaire sous windows 2000 server.. lorsqu'il y avait plusieur envoie en meme temps à des clients différent. seul le dernier captait l'événement comme quoi il lui etait arriver des donnée.. et les autres attendait infiniment.
Je sais pas exactement c quoi le bug.. mais moi je les regler en mettant les send dans une list et avec un thread pour traiter la list des sends, qui envoyais le prochain send lorsque le send précédant etait terminer.
Je sais pas si ca va pouvoir t'aider.. du moins j'espere..
0
CreaTiXCalimero Messages postés 2 Date d'inscription mercredi 18 octobre 2000 Statut Membre Dernière intervention 6 avril 2002
6 avril 2002 à 20:51
Oui c'est exactement ca... Je suis sous win 2000 pro.

Malheureusement ca m'aide pas, le but étant le partage de fichiers à grande échelle, faut absolument que je puisse traiter des transferts simultanés...

Il y a plus en fait : Le problème ne semble se déclencher qu'avec moi (client local). Apparemment avec plusieurs clients provenant d'internet tout se passe très bien.

// CreaTiX ! //
-- http://creatixnet.com --
0
ShanaBurns Messages postés 30 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 30 mai 2003
8 avril 2002 à 16:55
Oui moi aussi c'était en local que tout fonctionnais...
Si tu trouve la solution pour le transfert simultaner ou la source du probleme, j'aimerais bien la savoir également.
0
ShanaBurns Messages postés 30 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 30 mai 2003
8 avril 2002 à 16:55
Oui moi aussi c'était en local que tout fonctionnais...
Si tu trouve la solution pour le transfert simultaner ou la source du probleme, j'aimerais bien la savoir également.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TicTacBoom Messages postés 1 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 15 septembre 2003
15 sept. 2003 à 21:40
j'aime mes chaussettesChaussettes ????

Salut

moi g un pb j'arrive a faire de DCC
qqc pourrai me donner une indication on une source pour m'aidée
merci
0
cs_babboss Messages postés 121 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 29 novembre 2006
14 déc. 2003 à 00:49
oui moi aussi j ai le meme pb kan je fait une boucle pour send a tout les winsock un message ya ke le derneir ki recoi
Et j ai lu une tite astuce sur ce site je c plus trop ou ki disai de metre un Doevents apres un SendData :)
vila je pense ke sa marchera
@++
0
kriterkriter Messages postés 1 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 11 février 2009
11 févr. 2009 à 04:42
Option Explicit

Private Declare Function inet_addr Lib "wsock32.dll" (ByVal addr As String) As Long
Private Declare Function htonl Lib "wsock32.dll" (ByVal hostlong As Long) As Long
Private Declare Function ntohl Lib "wsock32.dll" (ByVal netlong As Long) As Long
Private Declare Function inet_ntoa Lib "wsock32.dll" (ByVal inn As Long) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Any) As Long
Private Declare Sub MemCopy Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal cb&)

Private Sub Form_Load()
Winsock1.Connect "192.168.1.253", 6667
End Sub

Private Sub Winsock1_Connect()
Winsock1.SendData "USER a a a a" & vbCrLf & "NICK bot2" & vbCrLf & vbCrLf
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim x As String
Winsock1.GetData x, vbString
Debug.Print x

If InStr(x, "PRIVMSG") <> 0 Then
If InStr(x, "DCC CHAT") <> 0 Then
Dim y() As String, host As String
y = Split(Mid(x, InStr(x, " :�1;DCC ")), " ")
Winsock2.Connect IrcGetIP(y(UBound(y) - 1)), Replace(y(UBound(y)), "�1;", "")
End If
End If
End Sub

Function IrcGetIP(ByVal IPL$) As String
On Error GoTo IrcGetAscIPError:
Dim lpStr As Long, nStr As Long
Dim retString As String, inn As String
If Val(IPL) > 2147483647 Then
inn = Val(IPL) - 4294967296#
Else
inn = Val(IPL)
End Ifinn ntohl(inn): retString String(32, 0): lpStr = inet_ntoa(inn)If lpStr 0 Then IrcGetIP "0.0.0.0": Exit FunctionnStr lstrlen(lpStr): If nStr > 32 Then nStr 32
MemCopy ByVal retString, ByVal lpStr, nStrretString Left(retString, nStr): IrcGetIP retString
Exit Function
IrcGetAscIPError:
IrcGetIP = "0.0.0.0": Exit Function
End Function

Private Sub Winsock2_Connect()
Winsock2.SendData "Welcome to DCC ! " & vbCrLf
End Sub
0
Rejoignez-nous