Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Socket programozás Példák. Client / Server Session ClientServer socket bind listen read writeread write Connection request read close EOF acceptconnect.

Hasonló előadás


Az előadások a következő témára: "Socket programozás Példák. Client / Server Session ClientServer socket bind listen read writeread write Connection request read close EOF acceptconnect."— Előadás másolata:

1 Socket programozás Példák

2 Client / Server Session ClientServer socket bind listen read writeread write Connection request read close EOF acceptconnect Áttekintés

3 3

4 Select demo – Beej’s guide #include #define STDIN 0 // file descriptor for standard input int main(void) { struct timeval tv; fd_set readfds; tv.tv_sec = 2; tv.tv_usec = ; FD_ZERO(&readfds); FD_SET(STDIN, &readfds); // don't care about writefds and exceptfds: select(STDIN+1, &readfds, NULL, NULL, &tv); if (FD_ISSET(STDIN, &readfds)) printf("A key was pressed!\n"); else printf("Timed out.\n"); return 0; }

5 Select demo – Server side … fd_set master; fd_set readfds; int maxfds = sock; FD_ZERO(&master); FD_SET(sock, &master); for(;;) { readfds = master; select( maxfds+1, &readfds, 0, 0, 0 ); for (i=0; i<=maxfds; ++i) { if (FD_ISSET(i, &readfds)) { if (i==sock) { //új kliens akar csatlakozni int conn = accept(i, …); FD_SET(conn, &master); if (conn > maxfds) maxfds = conn; } else { // meglévő klienstől kaptunk üzenetet if ((rbytes=read(i, buf, sizeof(buf)))<=0) { // hiba ha <0, a kliens bontotta a kapcsolatot ha =0 close(i); FD_CLR(i, &master); // nem figyeljük tovább } else { // kapott üzenet feldolgozása… }

6 Select demo – Server side … fd_set master; fd_set readfds; int maxfds = sock; FD_ZERO(&master); FD_SET(sock, &master); for(;;) { readfds = master; select( maxfds+1, &readfds, 0, 0, 0 ); for (i=0; i<=maxfds; ++i) { if (FD_ISSET(i, &readfds)) { if (i==sock) { //új kliens akar csatlakozni int conn = accept(i, …); FD_SET(conn, &master); if (conn > maxfds) maxfds = conn; } else { // meglévő klienstől kaptunk üzenetet if (rbytes=read(i, buf, sizeof(buf))<=0) { // hiba ha <0, a kliens bontotta a kapcsolatot ha =0 close(i); FD_CLR(i, &master); // nem figyeljük tovább } else { // kapott üzenet feldolgozása… }

7 Select demo – Server side … fd_set master; fd_set readfds; int maxfds = sock; FD_ZERO(&master); FD_SET(sock, &master); for(;;) { readfds = master; select( maxfds+1, &readfds, 0, 0, 0 ); for (i=0; i<=maxfds; ++i) { if (FD_ISSET(i, &readfds)) { if (i==sock) { //új kliens akar csatlakozni int conn = accept(i, …); FD_SET(conn, &master); if (conn > maxfds) maxfds = conn; } else { // meglévő klienstől kaptunk üzenetet if (rbytes=read(i, buf, sizeof(buf))<=0) { // hiba ha <0, a kliens bontotta a kapcsolatot ha =0 close(i); FD_CLR(i, &master); // nem figyeljük tovább } else { // kapott üzenet feldolgozása… }

8 Select demo – Server side … fd_set master; fd_set readfds; int maxfds = sock; FD_ZERO(&master); FD_SET(sock, &master); for(;;) { readfds = master; select( maxfds+1, &readfds, 0, 0, 0 ); for (i=0; i<=maxfds; ++i) { if (FD_ISSET(i, &readfds)) { if (i==sock) { //új kliens akar csatlakozni int conn = accept(i, …); FD_SET(conn, &master); if (conn > maxfds) maxfds = conn; } else { // meglévő klienstől kaptunk üzenetet if ((rbytes=read(i, buf, sizeof(buf)))<=0) { // hiba ha <0, a kliens bontotta a kapcsolatot ha =0 close(i); FD_CLR(i, &master); // nem figyeljük tovább } else { // kapott üzenet feldolgozása… }

9 Select demo – Server side … fd_set master; fd_set readfds; int maxfds = sock; FD_ZERO(&master); FD_SET(sock, &master); for(;;) { readfds = master; select( maxfds+1, &readfds, 0, 0, 0 ); for (i=0; i<=maxfds; ++i) { if (FD_ISSET(i, &readfds)) { if (i==sock) { //új kliens akar csatlakozni int conn = accept(i, …); FD_SET(conn, &master); if (conn > maxfds) maxfds = conn; } else { // meglévő klienstől kaptunk üzenetet if ((rbytes=read(i, buf, sizeof(buf)))<=0) { // hiba ha <0, // a kliens bontotta a kapcsolatot ha =0 close(i); FD_CLR(i, &master); // nem figyeljük tovább } else { // kapott üzenet feldolgozása… }

10 Server leállítása void closeServer(int); Int main() { … signal( SIGTERM, closeServer ); … } void closeServer(int sig) { // kilőtték a szervert, //itt tudod elvégezni a leállításhoz szükséges teendőket }

11 Server - foglalt port sock = socket(…); … int yes=1; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)); … bind(sock, …);

12 UDP alapú kommunikáció Forrás:http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzab6%2Frzab6connectionless.htmhttp://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzab6%2Frzab6connectionless.htm

13 UDP datagram socket Üzenet küldés: int sendto(int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, socklen_t tolen); Üzenet fogadása: int recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen);

14 Extra feladat többlet pontok szerzéséhez: – Több felhasználós számológép megvalósítása (ld. feladatok.txt)


Letölteni ppt "Socket programozás Példák. Client / Server Session ClientServer socket bind listen read writeread write Connection request read close EOF acceptconnect."

Hasonló előadás


Google Hirdetések