Avatar billede tax Nybegynder
26. september 2001 - 10:21 Der er 8 kommentarer og
1 løsning

Sockets i WxWorks

Jeg har følgende problem:

Jeg skal oprette en socketforbindelse imellem en WxWorks(server) maskine og et windowsprogram(client).

Jeg har lavet et windowsprogram, og testet det op imod en echoserver, og det ser ud til at fungere fint.

Problemet er nu når jeg skal lave min WxWorks server, kan jeg ikke læse på den indkommende socket, men jeg kan sagtens skrive til den.
(Jeg tester med en telnet applikation.)

Det vil sige at jeg kan skabe forbindelse til serveren med telnet fra min lokale pc. Serveren opretter nu en dedikeret tråd til at håndtere denne forbindelse.

Når denne tråd oprettes starter den med at sende \"Hello world!\" til klienten, for derefter at skulle læse 4 tegn fra klienten med kommandoen:
fioRead(sockethandle, (char*) mybuffer, 4);

Problemet er blot at klienten kan hamre som en gal i tastaturet uden at read returnerer. Det er som om at fioRead ikke vil returnere når den har læst de 4 tegn jeg beder den om.

Det der er endnu mere underligt er at når jeg trykker enter i telnet kommer følgende respons:

Hello world!ssss
ARGH!!!ARGH!!!ARGH!!!ARGH!!!ARGH!!!ARGH!!!sssssssssssssssssssssssssss

ARGH!!! = en teststreng jeg sender når serveren har læst.

s = er den tast jeg sender igennem telnet med (Hvoffor echoer den på min telnet skærm?)

Den læser 6 gange??

Enhver ide der kan kaste lys over dette mysterium modtages med kyshånd!

:)
Avatar billede tax Nybegynder
26. september 2001 - 10:23 #1
Skal man sende et terminatetegn når man sender til en socket??
Avatar billede tax Nybegynder
26. september 2001 - 10:54 #2
Nu anvender jeg read() i stedet for
fioRead(sockethandle, (char*) mybuffer, 4);

Men jeg har stadig problemet at serveren først modtager noget efter at brugeren trykker enter på telnetsiden.

Er det normalt at man skal sende et enter hvergang man vil sende til read()???

Desuden ignorerer read() fuldstændig angivelsen af maxbytes???
Avatar billede mickni33 Nybegynder
26. september 2001 - 11:31 #3
vil du have at serveren skal kunne se hvad klienten indtaster, altså et tegn af gangen
Avatar billede tax Nybegynder
26. september 2001 - 11:43 #4
Det jeg skal sende er en struct, derfor vil jeg have serveren til at modtage et specielt antal tegn, som den så kan caste med den struct.

Jeg er ude efter kun at få en besked når det antal tegn er modtaget.
Avatar billede mickni33 Nybegynder
26. september 2001 - 11:49 #5
nåååååå, Hvad hvis du laver en simpel if statement så som (spejderkode)

while(streng != \'\\n\'){
cin>>streng;
if(streng == 4)
read(streng);
}
Avatar billede tax Nybegynder
26. september 2001 - 12:00 #6
Skal man sende et enter i enden hvergang man skal sende til en socket??? Det er det eneste der kan få read() og recv() til at hoppe ud. Det er mærkeligt???

Eller er det telnet, der ikke sender det jeg tror den sender når jeg trykker enter???
Avatar billede mickni33 Nybegynder
26. september 2001 - 12:11 #7
Når der den ene gang skal sendes efter 10 tegn og den anden gang skal sendes efter 5 så ved read jo ikke hvor når der skal sendes når din buffer har forskellig størrelse hvergang, derfor er det jo meget smart at den ved den først skal sende når man trykker \"enter\" (altså \'\\n\').
Men man skal ikke trykke enter hvergang hvis det er en streng som har en værdi ved hjælp af cin>>. Men cin>> bruger selvfølgelig også \\n. sååå lad vær med at gå op i det, hvis det virker er det fedt :)
Avatar billede tax Nybegynder
26. september 2001 - 14:12 #8
Fejlen er fundet. Den telnetapplikation jeg brugte brugte en buffer af en art. Når jeg gik ovet ril et c proggy fungerede det hele fint.

Hmmm

Men nevermind!!!
Avatar billede mickni33 Nybegynder
26. september 2001 - 18:24 #9
Ja man skal sku nok finde ud af det til sidst, godt gået :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester