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 ;)