Toon posts:

ASP.NET en Sockets

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een project in ASP.NET, daarbij moet er informatie gestuurd worden tussen een client en een server. Om dit te doen maak ik gebruik van sockets, hierbij stuit ik op een probleem. Het versturen van data en het aanmaken van de sockets gaat goed (dit heb ik gecontroleerd met een packetsniffer). Alleen het ontvangen van data gaat mis. Hierbij blijft de webpage zeer lang laden, het lijkt wel of hij in een eeuwige loop terecht is gekomen, hij geeft verder geen errors.

Ik maak gebruik van de volgende code (in VB.net; beetje uitgekleed voor deze post):

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Dim host As String
Dim poort As String

host = TextBox1.Text
poort = CInt(TextBox2.Text)

Dim objTCPC As TcpClient
objTCPC = New TcpClient()
Dim objStream As Stream

Try
objTCPC.Connect(host, poort)
objStream = objTCPC.GetStream()

Dim inputbyte As [Byte]() = Encoding.ASCII.GetBytes(inputstr)
objStream.Write(inputbyte, 0, inputbyte.Length)

Dim objSr As StreamReader
objSr = New StreamReader(objTCPC.GetStream(), Encoding.ASCII)
Dim strServerResponse As String

strServerResponse = objSr.ReadToEnd()


objSr.Close()
objTCPC.Close()

Catch ex As Exception
TextBox3.Text = TextBox3.Text + ex.ToString()
End Try


Hierbij zijn de volgende dingen geïmporteerd:

code:
1
2
3
4
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Text


Ik ben geen expert op het gebied van sockets maar volgens verschillende voorbeelden moet deze code werken, helaas doet dat het niet. Misschien weten jullie wat er verkeerd zit in de code, of is er een andere oplossing om snel direct data te versturen tussen de client en de server. De search biedt helaas geen soelaazzzz...

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Misschien wordt de verbinding niet verbroken door de zender waardoor de stream niet "eindigt" maar open blijft staan en hij gewoon infinite wacht op meer data.
Je zou eens kunnen kijken naar een getimede functie oid.

offtopic:
Was jij niet die gozer die in het projectlokaal aan het rondvragen was?

[ Voor 21% gewijzigd door MTWZZ op 22-11-2004 19:41 ]

Nu met Land Rover Series 3 en Defender 90


  • Jabbah
  • Registratie: Februari 2004
  • Laatst online: 18-05 12:03
Wat doet ie niet dan?

Ik gebruik zelf de volgende code op gegevens van een server op te vragen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(myURL);

req.ContentType = "text/xml";
req.Method= "POST";
req.Timeout = 30000;  // Timeout in ms.

// Stuur gegevens naar server (hier: XML)            
Stream stream = req.GetRequestStream();
byte[] arrBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(xmlIn);
stream.Write(arrBytes, 0, arrBytes.Length);
stream.Close();

// Lees response vd server           
WebResponse resp = req.GetResponse();
Stream respStream = resp.GetResponseStream();
StreamReader rdr = new StreamReader(respStream, System.Text.Encoding.ASCII);
string strResponse = rdr.ReadToEnd();

Verwijderd

misschien een offtopic vraag, maar is sockets je enige optie? wat probeer je precies te doen. Anders zou je eens naar remoting of webservices kunnen kijken. En als je alleen data ophaalt van een (web)server zou je ook de WebClient class eens kunnen bekijken. Maar ik zie niet precies wat je wilt doen, dus miss. is mijn post geheel overbodig.

Verwijderd

Topicstarter
De oplossing was dat in de listener het luisteren in een aparte thread gezet moest worden en niet in een timer. Door het luisteren naar de socket werd de main thread aan het slapen gezet waardoor het programma als het waren 'vastliep'. Door dit in een aparte thread te zetten ging alles okay!

Nu nog 1 vreemd iets:
Dit werkt perfect als je lokaal doet... Je kan zelfs iets sturen naar een computer op poort 21 en dan krijg je netjes berichtje van de desbetreffende FTP server terug. Maar met mijn client en server programmaatjes en dan met het internet ertussen krijg ik geen verbinding :? Enige idee???

Verwijderd

Dit schreeuwt om het gebruik van een service die zulke dingen afhandelt.

Mijn advies: Hou asp.net voor web gedeelte en schrijf een service die je verbindingen met die andere server of client regelt.

Verwijderd

Wat dacht je van niet alles zelf maken:
Gebruik op de client de MS soap-toolkit of iets anders om makkelijk webservices te benaderen en gebruikt op de server asp.net webservices. Dat werkt echt heel gemakkelijk en dan kun je tijd stoppen in het maken van je applicatie-logica en niet in het bouwen van een communicatielaag.
Pagina: 1