streamwriter eller reader fryser

Tags:    c#

hey,

jeg har lavet en socket server/client løsning som bruger streamwriter og streamreader.

mit problem er at når jeg forbinder flere klienter til serveren og begynder at sende beskeder fra klienterne ind til serveren, så kan kun den ene klient sende og modtage.. den anden klient fryser.

Er der nogle der har en løsning på dette? /:
server code:

http://pastebin.com/6vyq5W8q

Client code:

http://pastebin.com/u4YCUzRd




4 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 15 karma
Sorter efter stemmer Sorter efter dato
allHandlers var for at serveren kunne holde styr på sine forbindelser og lukke dem hvis det blev nødvendigt.

Hmm det virker fint her.

Serveren står blot for at acceptere forbindelserne, den delegerer kommunikationen til ConnectionHandlers.

Server.cs:
Fold kodeboks ind/udCSharp kode 


ConnectionHandler får en socket som er klienten den skal snakke med og så begynder at kommunikere:

ConnectionHandler.cs:
Fold kodeboks ind/udCSharp kode 


Der er nok et par ændringer i IP og namespaces som du lige skal rette tilbage, men ellers er der ikke meget andet. I stedet for at opretty nye stream objects gemmes de på ConnectionHandleren.

Med dette var jeg i stand til at starte serveren, forbinde 3 klienter, og de kunne alle skriv og modtage hver for sig.

Når din applikation bliver mere udviklet bør du tilføje fejlhåndtering. F.eks. går det ikke godt hvis en klient lige pludselig lukker forbindelsen.



Indlæg senest redigeret d. 02.02.2014 16:55 af Bruger #14645
For hver klient der forbinder starter du en ny tråd op som udfører metoden socketServer, som skal håndtere kommunikation med den nyligt forbundne klient. Men du har kun en enkelt socketForClient til alle trådene så de andre socket forbindelser går tabt fordi du overskriver socketForClient og derfor virker kun en klient.

Du er nødt til at gemme din socket for hver enkelt forbindelse. Nu kan jeg ikke se hvad din nuværende klasse hedder, men lad os kalde den 'Server'. En mulighed er at du så laver en ny instans af en klasse f.eks. kaldet 'ConnectionHandler' som står for at håndtere forbindelsen:

Fold kodeboks ind/udCSharp kode 


Og din ConnectionHandler vil så indeholde det der var din socketServer og sendAndReseaveMessage. Groft udkast:

Fold kodeboks ind/udCSharp kode 




Hejsa igen..

Jeg er i tvivl om hvad linien
Fold kodeboks ind/udCSharp kode 
er til for?

Jeg har lavet ConnectionHandler klassen med det indhold du har vist. men synes ikke at kunne få det til at virke /:



Hejsa igen...

Inden vi så dit svar havde vi løst problemet ved at lægge networkstrem ned i get og set metoder, men har valgt updatere det med din løsning, da den ser pænere ud..

Vi takker for din hjælp :)



t