Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C#] verstuur data met een socket

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hello,

Ik ben hier bezig met een kleine applicatie die als TCP client werkt. Ik heb een embedded device die als TCP server werkt, en m'n c# applicatie moet daarop connecteren.

Nu werkt alles goed, behalve het versturen van de data. Ik zou willen hebben dat de data onmiddelijk verstuurd wordt. Nu is dit niet het geval, en krijgt m'n ebedded device enkel de verstuurde data als de socket op pc-zijde gesloten is.

Dit is wat ik heb
C#:
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
// ip-adres en poort invullen
            IPEndPoint hostep = new IPEndPoint(Machineclass.Ipadres, 2000);

            EndPoint ep = (EndPoint)hostep;

            sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                sock.Connect(hostep);
            }

            catch (SocketException f)
            {
                clsOutput.output_print(clsOutput.type.Debug, "<< Error connecting socket = " + f.ToString());
                return;
            }
            try
            {
                sock.NoDelay = true;
                // data versturen
                string test = "test";
                sock.Send(Encoding.ASCII.GetBytes(test));
            }
            catch (SocketException f)
            {
                clsOutput.output_print(clsOutput.type.Debug, "<< Problem sending data = " + f.ToString());
                sock.Close();
                return;
            }


Nu is het zo dat dit stukje code dus effectief iets zou moeten verzenden. Maar het wordt enkel ' doorgestuurd ' ( maw aan de server zeggen dat de data verstuurd is ) als ik sock.Close() doe.

Hoe zorg ik ervoor dat de data onmiddellijk verstuurd wordt als ik " sock.Send() " doe?

Bedankt!

  • asfaloth_arwen
  • Registratie: Februari 2005
  • Laatst online: 08:30
Kan het zijn dat je je buffer moet flushen? Dat zal wel automatisch gebeuren op het moment dat je de socket sluit.

Specs


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 12:29
^^ Helemaal correct

Roomba E5 te koop


Verwijderd

Topicstarter
En hoe zou ik dit dan kunnen doen?

:o

  • asfaloth_arwen
  • Registratie: Februari 2005
  • Laatst online: 08:30
Gebruik de API/google? :+

C# flush socket buffer oid

[ Voor 47% gewijzigd door asfaloth_arwen op 20-03-2008 13:44 ]

Specs


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:34

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op donderdag 20 maart 2008 @ 13:41:
En hoe zou ik dit dan kunnen doen?

:o
Eeehh.. no offence maar als je dat zelf niet kan achterhalen dan moet je je misschien eens gaan afvragen of je niet beter iets anders kan gaan maken want dit is en makkelijk op te zoeken en een redelijk basis iets van socket communicatie.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Ik heb uiteraard al gezocht op google, maar flushen van een socket blijkt niet te gaan (had dit al opgezocht voor in deze thread heb aangemaakt)

Wat ik ook al geprobeerd heb ik om hetzelfde te doen met een networkstream ipv de 'gewone' socket.send().

Een networkstream kun je wel je flushen

C#:
1
2
3
4
5
6
7
8
9
                string test = "test";

                NetworkStream ns = new NetworkStream(sock);

                //Write function writes all bytes to send receiver end of connected socket.
                ns.Write(Encoding.ASCII.GetBytes(test), 0, test.Length);

                //Flush() use to clear all data from Stream object to future use.
                ns.Flush();


cfr. http://angrez.blogspot.co...h-socket-in-net-or-c.html

maar dit werk ook niet .. enkel als ik een "sock.close()" doe krijg ik m'n data ..

bedankt!

[ Voor 7% gewijzigd door Verwijderd op 20-03-2008 13:52 ]


  • asfaloth_arwen
  • Registratie: Februari 2005
  • Laatst online: 08:30
Op de door jou gegeven link maken ze gebruik van streamreader/streamwriter en flushen ze de streamwriter...

Specs


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:34

Creepy

Tactical Espionage Splatterer

En wat zegt de documentatie van je embedded device over het ontvangen van data? Misschien reageert je device pas als zijn recieve buffer vol zit of als de connectie wordt verbroken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Creepy schreef op donderdag 20 maart 2008 @ 13:58:
En wat zegt de documentatie van je embedded device over het ontvangen van data? Misschien reageert je device pas als zijn recieve buffer vol zit of als de connectie wordt verbroken.
M'n device antwoord op ieder 'ontvangen' data ..

Als ik onstaande doe, werkt het ook, maar dit is eigenlijk hetzelfde als een socket.close()
C#:
1
sock.Shutdown(SocketShutdown.Send);


maar ervoor zorgen dat de data onmiddellijk verstuurd wordt werkt precies niet ..

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 10:21

TeeDee

CQB 241

Heb je, zoals aangegeven door asfaloth_arwen, ipv een networkstream een Stream- reader/writer gebruikt?

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Stuur je niet gewoon te snel achter elkaar kleine pakketjes waardoor TCP het buffert tot de buffer vol zit of je een tijdje niks stuurt?

Verwijderd

Topicstarter
TeeDee schreef op donderdag 20 maart 2008 @ 16:24:
Heb je, zoals aangegeven door asfaloth_arwen, ipv een networkstream een Stream- reader/writer gebruikt?
Dit heb ik inderdaad gedaan, vergeten te vermelden, sorry!

C#:
1
2
3
4
5
6
7
                NetworkStream ns = new NetworkStream(sock);

                StreamWriter sw = new StreamWriter(ns);
                //Write function writes all bytes to send receiver end of connected socket.
                sw.AutoFlush = true;
                    
                sw.Write("test");


Dit werkt jammergenoeg ook niet ..

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

nevermind, ben verkeerd

[ Voor 255% gewijzigd door ? ? op 20-03-2008 17:24 ]

Pagina: 1