Anonymní profil Two – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Two – Programujte.comAnonymní profil Two – Programujte.com

 

Příspěvky odeslané z IP adresy 94.112.85.–

Two
C / C++ › recv() v klientovi v client-…
27. 3. 2013   #173965

Zdravím přítomné.

Píšu client-server aplikaci, doted bylo vše v pohodě, klient poslal požadavek pomocí write(), server ho přijal read(), rozparsoval, zpracoval, vytvořil odpověď. Teď se to ale pokazilo. Když jsem napsal funkci write na server a read na klienta pro poslání odpovědi, tak se program při spuštění zastaví a vypadá to, že klient se zasekne na readu, ale zároveň ani server nezpracovává požadavek. Jakoby se posílal první požadavek a nikdy se nedoposlal.

Když ale z klienta funkci read odstraním, tak server požadavek zase přijme, zpracuje a odešle (akorát ho už nikdo nepřijme).

Kód z klienta:

// sends data
  if((size = write(clientSocket, request.c_str(), request.length())) == -1) {
    printErr(ERR_SEND);
    return ERR_SEND;
  } 

  // recieves data
  while ((size = read(clientSocket, buf, BUFFER_LEN)) != 0) {
    recieved.erase();
    recieved.append(buf, size);

    data = data + recieved;
  }

  // closes a connection
  close(clientSocket);

Kód ze serveru:

if((pid = fork()) == 0) {
      while ((size = read(clientSocket, buf, BUFFER_LEN)) != 0) {
        recieved.erase();
        recieved.append(buf, size);

        request = request + recieved;
      }

      parserInput(request);
      getData();
      parserOutput();

      if((size = write(clientSocket, sendback.c_str(), sendback.length())) == -1) {
        printErr(ERR_SEND);
        return ERR_SEND;
      } 

      close(clientSocket);

    }

Prosím pište jakékoliv návrhy. Snad bude nějaký správný.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý