|
| Flere connections vha. winsock... Fra : lars |
Dato : 23-10-03 13:14 |
|
Hej,
Nedenstående kode bevirker, at winsock accepterer flere connections - ved at
oprette et kontrol-array af sockets. Det er fint nok. Men, jeg kan ikke
rigtig forstå hvordan eventet _DataArrival(...) får fat i de data der kommer
ind???
Lars
Private intIBrug As Long
Private Sub Form_Load()
intIBrug = 0
tcpServer(0).LocalPort = 1001
tcpServer(0).Listen
End Sub
Private Sub tcpServer_ConnectionRequest(index As Integer, ByVal requestID As
Long)
If index = 0 Then
intIBrug = intIBrug + 1
Load tcpServer(intIBrug)
tcpServer(intIBrug).LocalPort = 0
tcpServer(intIBrug).Accept requestID
End If
End Sub
Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
?????
End Sub
| |
Tomas Christiansen (23-10-2003)
| Kommentar Fra : Tomas Christiansen |
Dato : 23-10-03 21:30 |
|
lars skrev:
> Nedenstående kode bevirker, at winsock accepterer flere connections - ved
at
> oprette et kontrol-array af sockets. Det er fint nok. Men, jeg kan ikke
> rigtig forstå hvordan eventet _DataArrival(...) får fat i de data der
kommer
> ind???
....
> Private Sub tcpServer_ConnectionRequest(index As Integer, ByVal
requestID...
....
> Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
Prøv at slette proceduren tcpServer_DataArrival og opret den derefter igen -
ikke ved at kopiere koden ind igen, naturligvis, men ved f.eks. at stille
dig i tcpServer_ConnectionRequest proceduren og vælge DataArrival fra
procedure-listen lige over kode-vinduet.
Mon ikke du har fået oprettet din tcpServer_DataArrival _inden_ du fortalte
VB at tcpServer faktisk er et control-array?
-------
Tomas
| |
Tomas Christiansen (23-10-2003)
| Kommentar Fra : Tomas Christiansen |
Dato : 23-10-03 21:35 |
|
lars skrev:
> oprette et kontrol-array af sockets.
Husk, forresten, at lægge Service Pack 5 til Visual Basic 6.0/Visual Studio
6.0 på din maskine, idet der er nogle graverende fejl i alle tidligere
versioner af Winsock-kontrollen som gør, at man ikke kan få behandling af
multiple TCP-forbindelser til at virke korrekt!
-------
Tomas
| |
Lars Kjærsgaard (25-10-2003)
| Kommentar Fra : Lars Kjærsgaard |
Dato : 25-10-03 08:38 |
|
Jeg synes det lyder meget sandsynligt dit løsningsforslag. Jeg vil sige dig
mange, mange tak - du har sikkert gjort en forskel.
De bedste hilsner
Lars
| |
mhabio (25-10-2003)
| Kommentar Fra : mhabio |
Dato : 25-10-03 11:21 |
|
Hej Lars,
Husk også at du skal sætte tcpServer(intIBrug).Remoteport = 0 når du loader
den nye control, ellers vil remoteport blive sat det det den foregående
control havde og denne port kan være blokkeret i flere minutter mens M$
Windoz rydder op.
Og at du vil få brug for en DoEvents når du ruller gennem dit tcpServer
array for at sende til alle connections, ellers er det kun den sidste der
modtager noget fra serveren.
Mikkel
"lars" <lk@skivehs.dk> wrote in message
news:bn8gj9$33q$1@news.net.uni-c.dk...
> Hej,
>
> Nedenstående kode bevirker, at winsock accepterer flere connections - ved
at
> oprette et kontrol-array af sockets. Det er fint nok. Men, jeg kan ikke
> rigtig forstå hvordan eventet _DataArrival(...) får fat i de data der
kommer
> ind???
>
> Lars
>
>
> Private intIBrug As Long
>
> Private Sub Form_Load()
> intIBrug = 0
> tcpServer(0).LocalPort = 1001
> tcpServer(0).Listen
> End Sub
>
> Private Sub tcpServer_ConnectionRequest(index As Integer, ByVal requestID
As
> Long)
> If index = 0 Then
> intIBrug = intIBrug + 1
> Load tcpServer(intIBrug)
> tcpServer(intIBrug).LocalPort = 0
> tcpServer(intIBrug).Accept requestID
> End If
> End Sub
>
> Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
> ?????
> End Sub
>
>
| |
Lars Kjærsgaard (26-10-2003)
| Kommentar Fra : Lars Kjærsgaard |
Dato : 26-10-03 08:53 |
|
Hej Mikkel,
det lyder som om du har stor viden og erfaring i prog. af winsock og netværk
i VB. Kan du fortælle mig hvor du har din viden fra? jeg kan ikke rigtig
finde noget litteratur omkring emnet.
På forhånd mange tak.
De bedste hilsner
Lars
"mhabio" <FoxylogicNOT@stofanet.dk> skrev i en meddelelse
news:3f9a4e9b$0$28971$ba624c82@nntp02.dk.telia.net...
> Hej Lars,
>
> Husk også at du skal sætte tcpServer(intIBrug).Remoteport = 0 når du
loader
> den nye control, ellers vil remoteport blive sat det det den foregående
> control havde og denne port kan være blokkeret i flere minutter mens M$
> Windoz rydder op.
>
> Og at du vil få brug for en DoEvents når du ruller gennem dit tcpServer
> array for at sende til alle connections, ellers er det kun den sidste der
> modtager noget fra serveren.
>
> Mikkel
>
> "lars" <lk@skivehs.dk> wrote in message
> news:bn8gj9$33q$1@news.net.uni-c.dk...
> > Hej,
> >
> > Nedenstående kode bevirker, at winsock accepterer flere connections -
ved
> at
> > oprette et kontrol-array af sockets. Det er fint nok. Men, jeg kan ikke
> > rigtig forstå hvordan eventet _DataArrival(...) får fat i de data der
> kommer
> > ind???
> >
> > Lars
> >
> >
> > Private intIBrug As Long
> >
> > Private Sub Form_Load()
> > intIBrug = 0
> > tcpServer(0).LocalPort = 1001
> > tcpServer(0).Listen
> > End Sub
> >
> > Private Sub tcpServer_ConnectionRequest(index As Integer, ByVal
requestID
> As
> > Long)
> > If index = 0 Then
> > intIBrug = intIBrug + 1
> > Load tcpServer(intIBrug)
> > tcpServer(intIBrug).LocalPort = 0
> > tcpServer(intIBrug).Accept requestID
> > End If
> > End Sub
> >
> > Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
> > ?????
> > End Sub
> >
> >
>
>
| |
mhabio (26-10-2003)
| Kommentar Fra : mhabio |
Dato : 26-10-03 09:37 |
|
Hej Lars,
Jeg har et program der bruger Winsock til at lave en remote control med.
Derfor har jeg sikkert kæmpet med de samme problemer som dig. Jeg brugte
Comp.lang.basic.visual.misc hvor netop problematikken med remoteport blev
behandlet. Ellers kender jeg ikke til noget info udover M$'s hjælp på
nettet.
Det er sat op sådan:
Server:
tcpServer(0).RemotePort = 0 'skal sættes inden Listen startes.
tcpServer(0).LocalPort = 1001
tcpServer(0).Listen
Client:
tcpServer(0).RemotePort = 1001
tcpServer(0).LocalPort = 0
Nu kan jeg læse at Tomas skrev at der skulle være fikset nogle fejl med
Service Pack 5 til VB6, måske er remoteport ikke et problem mere ??.
| |
Lars (26-10-2003)
| Kommentar Fra : Lars |
Dato : 26-10-03 10:19 |
|
Hej Mikkel,
og endnu engang tak.
Du skriver...
"Og at du vil få brug for en DoEvents når du ruller gennem dit tcpServer
array for at sende til alle connections, ellers er det kun den sidste der
modtager noget fra serveren."
Jeg har netop erfaret hvad du beskriver, at der kun sendes til den sidst
oprettede connection.
...jeg er ikke helt sikker på jeg forstår, kan du uddybe din forklaring? Hvad
er det DoEvents skal gøre?
De bedste hilsner
Lars
| |
mhabio (26-10-2003)
| Kommentar Fra : mhabio |
Dato : 26-10-03 19:44 |
|
Et Doevents efter en SendData command giver Winsock lov til at behandle
commanden. Selvom at du har et array af winsock controller, så kan kun en
arbejde ad gangen. Et DoEvents giver den enkelte love til at udføre sit
arbejde inden du går videre til den næste. Det burde egentligt ikke være
nødvendigt, men er sikkert en fejl i Winsock sammen med VB.
tcpserver.SendData sstring
DoEvents
Mikkel
"Lars" <lk@skivehs.dk> wrote in message news:bng3if$q6b$1@sunsite.dk...
> Hej Mikkel,
>
> og endnu engang tak.
>
> Du skriver...
> "Og at du vil få brug for en DoEvents når du ruller gennem dit tcpServer
> array for at sende til alle connections, ellers er det kun den sidste der
> modtager noget fra serveren."
>
> Jeg har netop erfaret hvad du beskriver, at der kun sendes til den sidst
> oprettede connection.
> ..jeg er ikke helt sikker på jeg forstår, kan du uddybe din forklaring?
Hvad
> er det DoEvents skal gøre?
>
> De bedste hilsner
> Lars
>
>
| |
|
|