Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[C#] Zenden, ontvangen, zenden, ontvangen, van een SslStream

Pagina: 1
Acties:

Verwijderd

Topicstarter
Bestaat er een mogelijkheid om constant te communiceren via SslStream ?

Ik ben zelf nog maar pas begonnen met sockets, dus er is mij nog het een en het ander niet duidelijk. Ik zou dus willen communiceren met een andere server a.d.h.v. xml. De eerste 4 bytes van de stream is de lengte van het xml bestand + 4 bytes, en daarna volgt de xml string in bytes. Na het zenden, krijg ik antwoord van de server, terug eerst 4 bytes met de lengte gevolgd door de xml string. Maar na het krijgen van een response, is het dan mogelijk om terug iets te zenden ? De stream werkt wel via SSL, maar dat speelt niet direct een rol, veronderstel ik ?

Alle tips zijn welkom, want ik snap/ken er nog niet veel van, van dat socket gedoe. Om eenmalig te communiceren lukt het perfect, maar ik begrijp niet goed hoe ik terug moet antwoorden om te blijven communiceren met de server. En ik veronderstel dat het niet de bedoeling is om constant die socket af te sluiten, en een nieuwen te openen ?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
In een stream kun je gewoon constant data writen en readen ( Al zijn niet alle streams 2 richtingen op ).

Wat is het probleem dat je hebt?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SslStream myStream = new SslStream();
myStream.Open();

myStream.Write( myData );
incomingData = myStream.Read( dataLength );

myStream.Write( myData );
incomingData = myStream.Read( dataLength );

myStream.Write( myData );
incomingData = myStream.Read( dataLength );

myStream.Write( myData );
incomingData = myStream.Read( dataLength );

myStream.Write( myData );
incomingData = myStream.Read( dataLength );

myStream.Close();

Zou toch gewoon moeten doen wat je wilt?

Het haalt voor de rest niet zoveel uit of het een ZipStream, NetworkStream, SslStream, RooksignaalStream of wat anders is. Alleen het initialiseren zal wat anders gaan, en de Exceptions die op kunnen treden zijn anders.

[ Voor 13% gewijzigd door Woy op 12-08-2008 15:53 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 06:04

Sebazzz

3dp

rwb schreef op dinsdag 12 augustus 2008 @ 15:52:
RooksignaalStream of wat anders is. Alleen het initialiseren zal wat anders gaan, en de Exceptions die op kunnen treden zijn anders.
"BadWeatherException was uncaught"
"OutOfMatchesException was uncaught" :p
Maar na het krijgen van een response, is het dan mogelijk om terug iets te zenden ?
Ja tuurlijk. SslStream is bidirectionaal.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Verwijderd

Topicstarter
Ik heb dat geprobeerd maar krijg na de write geen antwoord meer terug. Blijkbaar loopt er iets fout tijdens het writen.

Werving is hier niet toegestaan: werving


Ik zal even kort schetsen wat het probleem is : Dus ik heb via TcpClient() en een SslStream() een verbinding gemaakt met een server. Nu wil ik met die server communiceren via xml. Voor de xml string gestuurd wordt, moet ik eerst 4 bytes met de lengte van de totale stream (incl die 4 bytes) meesturen in network order / big endian format.
Na het sturen van de login, krijg ik geen antwoord meer. Ik veronderstel dat mijn 4 bytes niet correct zijn, maar ik zou begot niet weten hoe ik dit moet gaan klaarspelen.

Ik heb wel codevoorbeelden in php, c++ of java ... mocht dat een hulp zijn ?

[ Voor 15% gewijzigd door RobIII op 13-08-2008 00:28 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het is niet echt de bedoeling om hier mensen te zoeken die je problemen oplossen.

Als je wat concretere voorbeelden hebt kunnen mensen je hier mischien verder helpen. Probeer voor de rest eens te debuggen, want het moet geen probleem zijn om achter elkaar op een stream te schrijven, behalve als je de stream eerst closed of dat de andere partij dat doet, dan zul je de stream opnieuw op moeten zetten.

De volgende manier zou gewoon moeten werken ( Wel even aanpassen naar correcte code natuurlijk )

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using( SslStream stream = new SslStream() )
{
    stream.Open();
    while( Running )
    {
        int length = GetDataLength();
        stream.Write( GetBytesFromInt( length ) );
        stream.Write( GetData() );

        length = GetIntFromBytes( stream.ReadBytes( 4 ) );

        byte[] receivedData = stream.ReadBytes( length );
        ProcessReceivedData( receivedData );
    }
    stream.Close()
}

[ Voor 40% gewijzigd door Woy op 12-08-2008 21:11 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • pedorus
  • Registratie: Januari 2008
  • Niet online
[google=c# endian]?

Op zich zou java code naar c# omzetten niet zo moeilijk moeten zijn.

[ Voor 7% gewijzigd door pedorus op 12-08-2008 21:10 ]

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Verwijderd

Lijkt me een kwestie van goed debuggen. Beide projecten tegelijk draaien (zie Start-up projects van je solution), breakpoints zetten en gaan met die banaan (F5).

Kijk ook eens naar de BitConverter class om van int naar een byte[] te gaan en omgekeerd.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Beste Joeri, werving, van welke aard dan ook, is hier niet toegestaan. Ik wil je dan ook verzoeken om dat niet meer te doen. Verder zijn we hier geen afhaalchinees waar je even binnenwipt en een oplossing op een zilveren schaaltje in witte plastic bakjes ( :P ) krijgt aangedragen; we verwachten hier eigen inzet en we denken dus alleen met je mee. Mensen verzoeken het voor je op te lossen of er zelfs andere middelen tegen aan te smijten om mensen zover te krijgen is hier dan ook niet gewenst.

Verder wil ik je graag wijzen op onze Korte FAQ om je snel en makkelijk in te lezen in hoe we hier te werk gaan en voor wat extra leesvoer neem je het best onze Programming Beleid Quickstart door waarin je kunt lezen wat we van jou, als topicstarter, verwachten.

Desalniettemin van harte welkom en een leuke tijd gewenst hier op GoT :w

[ Voor 29% gewijzigd door RobIII op 13-08-2008 00:33 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1