Avatar billede dpp83 Nybegynder
09. september 2004 - 11:03 Der er 4 kommentarer og
1 løsning

Modtage fra Server til Client

Hej.
Jeg sidder og fedter med noget Client/Server programmering.
Jeg vil gerne have serveren til at skrive til klienten, men det driller mig en del.

Her er min kode (udgangspunkt):

//SERVER:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <cstdlib>
#include <cstdio>
#include <cerrno>
#include <iostream>
using namespace std;

void errexit(char *errmsg);

int main(int argc, char **argv) {
  struct sockaddr_in s_a;
  char buf;
  int sd, fd;

  if (argc != 2)
      errexit("Usage: server port");

  /* establish a server socket */
  if ((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
      errexit("Cannot allocate socket");
  s_a.sin_family = AF_INET;
  s_a.sin_addr.s_addr = htonl(INADDR_ANY);
  s_a.sin_port = htons(atoi(argv[1]));
  if (bind(sd, (struct sockaddr *) &s_a, sizeof(s_a)) < 0)
      errexit("Cannot bind socket");
  if (listen(sd, 1) < 0)
      errexit("Cannot listen");

  while(1) /* forever */
  {
      if ((fd = accept(sd, NULL, NULL)) < 0) /* accept a new connection */
        errexit("Accept failed");
      while(read(fd, &buf, 1))
        cout << buf;
      cout << endl;
      close(fd);
  }
}
void errexit(char *errmsg) {
  perror(errmsg);
  exit(1); 
}
-----------------------------------------------------------------
//CLIENT
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <cstdlib>
#include <cstdio>
#include <cerrno>
#include <iostream>
using namespace std;

void errexit(char *errmsg);

int main(int argc, char **argv) {
  struct sockaddr_in s_a;
  struct hostent *host;
  int sd;
  char buf;

  if (argc != 3)
      errexit("Usage: client hostname port");

  /* establish a client socket */
  if ((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
      errexit("Cannot allocate socket");
  if (!(host = gethostbyname(argv[1])))
      errexit("Cannot get name of host");
  s_a.sin_addr.s_addr = *((long *) host->h_addr);
  s_a.sin_family = AF_INET;
  s_a.sin_port = htons(atoi(argv[2]));
  if (connect(sd, (struct sockaddr *)&s_a, sizeof(s_a)) < 0)
      errexit("Cannot connect");

  /* communicate */
  for (buf='a'; buf<='z'; buf++)
  {
      write(sd, &buf, 1);
  }
  close(sd);
}

void errexit(char *errmsg) {
  perror(errmsg);
  exit(1);
}
--------------------------------------------------------------

Jeg har en ide om at jeg skal bruge Read og Write funktionerne men hvordan ved jeg ikke....

Mit spørgsmål er vel kort fortalt: HVordan får jeg serveren til at sende beskeder til clienten, og clienten til at skrive beskeden til skærmen?

Jeg er ret newbee i netværksprogrammering så al hjælp er velkommen ;)
Avatar billede arne_v Ekspert
09. september 2004 - 11:10 #1
Ofte bruger mand altså send og recv til at skrive og læse med.

Og det kan serveren også på fd (ikke på sd).
Avatar billede dpp83 Nybegynder
09. september 2004 - 11:11 #2
Jeg mener selvfølgelig ikke read og write, men listen og send funktionerne ;)
Avatar billede arne_v Ekspert
09. september 2004 - 20:01 #3
Serveren kalder send, client kalder recv og client skriver ud med f.eks. printf.

Hvor er du kørt fast henne ?
Avatar billede dpp83 Nybegynder
10. september 2004 - 09:19 #4
Jeg har så småt fundet ud af det selv.
Ellers mange tak for hjælpen.
Avatar billede dpp83 Nybegynder
03. januar 2006 - 15:58 #5
Lukkes
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