Gå til innhold

stream socket eller datagram socket?


Anbefalte innlegg

Skrevet

Hei! skal lage en server som recv og printer ut teksten. ( Klienten skal sende tekst ) Til dette, er det mest vanlig og bruke datagram sockets eller stream sockets?

Videoannonse
Annonse
Skrevet

Stream socket bruker tcp protokollen. Grovt sett vil det si at du er så godt som garantert at det du vil sende kommer fram og at det kommer fram i riktig rekkefølge.

 

Datagram sockets bruker udp protokollen. der er det ikke noen mekanismer som kontrollerer om det som sendes er det som kommer fram. Heller ikke rekkefølgen.

 

Så stream er nok greit å bruke som nevnt.

Skrevet

Er det en måte å lagre en hel setning i en string? når jeg bruker cin >> så får jeg kun første ordet.

 

Noen anbefalte måter og lagre hele setningen på?

Skrevet (endret)

getline skulle fungere helt fint...

 

#include <string>
using namespace std;

int main(void)
{
   string test("this is a string");
   cout << "testing reading a string\n";
   cout << "please enter a string with one or more words in it: ";
   getline (cin, test);
   cout << test << endl;
}

Endret av Mr.Garibaldi
Skrevet (endret)
Er det en måte å lagre en hel setning i en string? når jeg bruker cin >>  så får jeg kun første ordet.

 

Noen anbefalte måter og lagre hele setningen på?

Det skjer ikke pga. av du lagrer i string, men fordi cin >> leser ett og ett ord avskilt av whitespace.

 

Kan ikke på sparket si hvordan man endrer denne funksjonaliten...

 

Edit:

Prøv getline()

 

Eller:

cin.setf(ios::skipws);

se: http://www.cppreference.com/io_flags.html#format_flags

Endret av JBlack
Skrevet (endret)
getline(cin, s1) funker utmerket. Takker! :)

 

Bare hyggelig :)

 

Eller:

cout.setf(ios::skipws);

se: http://www.cppreference.com/io_flags.html#format_flags

Jeg trodde også denne var mulig, men greier ikke å få den til og fungere...

 

Etter litt søking fant jeg denne som sier at ">>" automatisk hopper over whitespace, så med minde du vil overlaste ">>" er det greiere å bruke getline(cin, string-variabel)...

Endret av Mr.Garibaldi
Skrevet (endret)

Jeg har ikke prøvd den siste selv. Men syntes den var grei å merke seg siden kjeksen ikke spesifiserte at 'hel setning' betydde avbrutt av cr. Dessuten er det greit å kjenne til disse generelt.

 

Edit: Får ikke den til å fungere jeg heller. :shrug:

Endret av JBlack
Skrevet

ios::skipws, som er satt by default, betyr ganske enkelt at mer enn ett mellomrom (eller annet whitespace) strippes bort når cin tar imot inndata.

 

Med andre ord:

string a, b; 
cin >> a >> b;
// Input: Hei  du (med to mellomrom)

Med skipws: a blir "Hei", b blir "du"

Uten skipws: a blir "Hei", b blir " "

Skrevet

hmm..holder på og kombinere noe slikt med FLTK. Men en liten ting.

Jeg har et const char *host og en Fl_Output.

const char *host;

output->value(host);

 

hvorfor vil ikke dette funke? Ifølge dokumentasjonen så er det Fl_Output::value(const char*)

Skrevet (endret)

Fann ut en ok løsning.

 

Noen som har laget et program som kan sende og motta samtidig? Noen tips til og gjøre dette?

 

Edit: Tenkte mer på en server som mottar men sender det han mottar til alle som er connecta. Har så smått begynt på å lære meg å bruke select(), men mye og sette seg inn i.

Endret av Kjeksen
Skrevet

Lurer på om det er mulig å motta selv om du skal til og skrive inn en melding. Som en slags interrupt funksjon som mottar teksten uavhengig hvor du er i programmet, og returnerer til samme plassen når den er ferdig.

Skrevet
Lurer på om det er mulig å motta selv om du skal til og skrive inn en melding. Som en slags interrupt funksjon som mottar teksten uavhengig hvor du er i programmet, og returnerer til samme plassen når den er ferdig.

Bruk en egen tråd (thread) til å motta.

Skrevet

Ok. Har sett i winsock faq. Der var det et eksempel om hvordan man bruker threads. Men ingen text eller forklaringer. Noen som vet om en tutorial om hvor det står utfyllende om bruken av threads?

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...