int RequeteReservationBDEF(char* Fichier) { struct RequeteBDEF notreRequetePerso; int rc; notreRequetePerso.Type = Question; notreRequetePerso.Action = RESERVATION; notreRequetePerso.NumTransac = NumTransac; notreRequetePerso.Heure= GetTimeBDEF(); rc = SendDatagram(Desc, ¬reRequetePerso, sizeof(struct RequeteBDEF), &psoc); if (rc == -1) { perror("SendDatagram error"); } else { fprintf(stderr, "Envoi de %d bytes\n", rc); } rc = ReceiveDatagram(Desc, ¬reRequetePerso, sizeof(struct RequeteBDEF), &psor); if (rc == -1) { perror("ReceiveDatagram"); return -1; } else { fprintf(stderr, "bytes:%d:%d\n", rc, notreRequetePerso.NumeroTicket); if (notreRequetePerso.NumeroTicket > 0) { ReservationTicketBDEF(Fichier, GetIP(&psoo), GetPort(&psoo), NumTransac, notreRequetePerso.Heure, NULL); NumTransac++; } return notreRequetePerso.NumeroTicket; } }
void OTIPEnumerator::HandleLookErr(void) { DEBUG_ENTRY_EXIT("IPEnumerator::HandleLookErr"); OTResult result; OSStatus status; TUDErr udErr; InetAddress addr; udErr.addr.buf = (NMUInt8 *) &addr; udErr.addr.len = udErr.addr.maxlen = sizeof(InetAddress); udErr.opt.maxlen = 0; result = OTLook(mEP); DEBUG_PRINT("OTLook returned %ld", result); switch (result) { case T_DATA: ReceiveDatagram(); break; case T_UDERR: status = OTRcvUDErr(mEP, &udErr); DEBUG_PRINT("OTRcvUDErr returned %ld", status); break; default: DEBUG_PRINT("Unhandled look error!"); break; } }
NMErr OTIPEnumerator::IdleEnumeration(void) { OSStatus status = kNMNoError; NMUInt32 timeSinceLastIdle; if (! bActive) return kNMNoError; if (bDataWaiting) status = ReceiveDatagram(); if (bFirstIdle) { timeSinceLastIdle = 0; bFirstIdle = false; } else { timeSinceLastIdle = OTElapsedMilliseconds(&mLastIdleTimeStamp); } OTGetTimeStamp(&mLastIdleTimeStamp); IdleList(timeSinceLastIdle); if (OTElapsedMilliseconds(&mLastQueryTimeStamp) > mEnumPeriod) { if (mEnumPeriod < kMaxTimeBetweenPings) mEnumPeriod *= 2; SendQuery(); } return status; }
int main(int argc, char *argv[]) { int rc; int Desc; int tm; int Port, Ip; char Tampon[80]; struct sockaddr_in psoo; /* o = origine */ struct sockaddr_in psos; /* s = serveur */ struct sockaddr_in psor; /* r = remote */ struct Requete UneRequete; memset(&psoo, 0, sizeof(struct sockaddr_in)); memset(&psos, 0, sizeof(struct sockaddr_in)); memset(&psor, 0, sizeof(struct sockaddr_in)); if (argc!=5) { printf("cli client portc serveur ports\n"); exit(1); } Desc = CreateSockets(&psoo, &psos, argv[1], atoi(argv[2]), argv[3], atoi(argv[4])); if (Desc == -1) perror("CreateSockets:"); else fprintf(stderr, "CreateSockets %d\n", Desc); Ip = GetIP(&psoo); Port = GetPort(&psoo); memset(Tampon, 0, sizeof(Tampon)); Ipv4ToS(Ip, Tampon); printf("Adresse Ip du client %s : Port %d \n", Tampon, Port); UneRequete.Type = Question; strncpy(UneRequete.Message, "Multiclient; Bonjour", sizeof(UneRequete.Message)); rc = SendDatagram(Desc, &UneRequete, sizeof(struct Requete), &psos); if (rc == -1) perror("SendDatagram"); else fprintf(stderr, "Envoi de %d bytes\n", rc); memset(&UneRequete, 0, sizeof(struct Requete)); tm = sizeof(struct Requete); rc = ReceiveDatagram(Desc, &UneRequete, tm, &psor); if (rc == -1) perror("ReceiveDatagram"); else fprintf(stderr, "bytes:%d:%s\n", rc, UneRequete.Message); close(Desc); }
int main(int argc, char *argv[]) { int rc; int Desc; int tm; struct sockaddr_in psoo; /* o = origine */ struct sockaddr_in psos; /* s = serveur */ struct sockaddr_in psor; /* r = remote */ struct Requete UneRequete; memset(&psoo, 0, sizeof(struct sockaddr_in)); memset(&psos, 0, sizeof(struct sockaddr_in)); memset(&psor, 0, sizeof(struct sockaddr_in)); if (argc!=5) { printf("cli client portc serveur ports\n"); exit(1); } Desc = CreateSockets(&psoo, &psos, argv[1], atoi(argv[2]), argv[3], atoi(argv[4])); if (Desc == -1) perror("CreateSockets:"); else fprintf(stderr, "CreateSockets %d\n", Desc); UneRequete.Type = Question; strncpy(UneRequete.Message, "Avec une structure: Bonjour", sizeof(UneRequete.Message)); rc = SendDatagram(Desc, &UneRequete, sizeof(struct Requete), &psos); if (rc == -1) perror("SendDatagram"); else fprintf(stderr, "Envoi de %d bytes\n", rc); memset(&UneRequete, 0, sizeof(struct Requete)); tm = sizeof(struct Requete); rc = ReceiveDatagram(Desc, &UneRequete, tm, &psor); if (rc == -1) perror("ReceiveDatagram"); else fprintf(stderr, "bytes:%d:%s\n", rc, UneRequete.Message); close(Desc); }
int RequeteReservationBDEF(char* Fichier, int heure) { struct RequeteBDEF notreRequetePerso; int rc; notreRequetePerso.Type = Question; notreRequetePerso.Action = RESERVATION; notreRequetePerso.NumTransac = NumTransac; notreRequetePerso.Heure = heure; rc = SendDatagram(Desc, ¬reRequetePerso, sizeof(struct RequeteBDEF), &psoc); if (rc == -1) { perror("SendDatagram error"); } else { fprintf(stderr, "Envoi de %d bytes\n", rc); } alarm(7); for(;;) { rc = ReceiveDatagram(Desc, ¬reRequetePerso, sizeof(struct RequeteBDEF), &psor); if (rc == -1) { if (errno == EINTR && IsSigAlarm == 1) { IsSigAlarm = 0; return RequeteReservationBDEF(Fichier, heure); } perror("ReceiveDatagram"); return -1; } else { if (NumTransac != notreRequetePerso.NumTransac) { continue; } fprintf(stderr, "bytes:%d:%d\n", rc, notreRequetePerso.NumeroTicket); if (notreRequetePerso.NumeroTicket > 0) { ReservationTicketBDEF(Fichier, GetIP(&psoo), GetPort(&psoo), NumTransac, notreRequetePerso.Heure, NULL); NumTransac++; } alarm(0); return notreRequetePerso.NumeroTicket; } } }
int main(int argc, char *argv[]) { int rc; int Desc; struct sockaddr_in psoo; /* o = origine */ struct sockaddr_in psos; /* s = serveur */ struct sockaddr_in psor; /* r = remote */ int tm; struct Requete UneRequete; char Tampon[40]; int Ip, Port; memset(&psoo, 0, sizeof(struct sockaddr_in)); memset(&psos, 0, sizeof(struct sockaddr_in)); memset(&psor, 0, sizeof(struct sockaddr_in)); printf("Ceci est le serveur\n"); if (argc!=3) { printf("ser ser port \n"); exit(1); } Desc = CreateSockets(&psoo, NULL, argv[1], atoi(argv[2]), NULL, 0); if (Desc == -1) perror("CreateSockets"); else printf(" CreateSockets : %d \n", Desc); while(1) { tm = sizeof(struct Requete); rc = ReceiveDatagram(Desc, &UneRequete, tm, &psor); if (rc == -1) perror("ReceiveDatagram"); else fprintf(stderr, "bytes:%d:%s\n", rc, UneRequete.Message); /*********************************************************************** int Ipv4ToInt(char *s, int *ip); void Ipv4ToS(int ip, char *s); int GetIP(struct sockaddr_in *pin); int GetPort(struct sockaddr_in *pin); ***********************************************************************/ Ip = GetIP(&psor); Port = GetPort(&psor); memset(Tampon, 0, sizeof(Tampon)); Ipv4ToS(Ip, Tampon); printf("Adresse Ip du client %s : Port %d \n", Tampon, Port); /* reponse avec psor qui contient toujours l'adresse du dernier client */ UneRequete.Type = Reponse; strcat(UneRequete.Message, " Client"); rc = SendDatagram(Desc, &UneRequete, sizeof(struct Requete), &psor); if (rc == -1) perror("SendDatagram:"); else fprintf(stderr, "bytes:%d\n", rc); } }
// // Client () performs the connection-less/connection-oriented client // related tasks // void Client() { SOCKADDR_IPX sa_ipx, // client address sa_ipx_server; // server address char chBuffer[MAX_DATA_LEN]; // data buffer int ret, cb; DWORD i; CreateSocket(); // // Bind to a local address and endpoint // BindSocket(&sa_ipx, pszLocalAddress, NULL); if (pszServerEndpoint == NULL) { printf("Server Endpoint must be specified....Exiting\n"); ExitProcess(-1); } // Fill the sa_ipx_server address address with server address and endpoint // if (pszServerAddress != NULL) { FillIpxAddress ( &sa_ipx_server, pszServerAddress, pszServerEndpoint); } else { printf("Server Address must be specified....Exiting\n"); ExitProcess(-1); } // Check the Specified protocol. Call connect() if a connection oriented // protocol is specified // if (chProtocol != 'd') { printf("Connecting to Server -"); PrintIpxAddress ( sa_ipx_server.sa_netnum, sa_ipx_server.sa_nodenum ); // // Connect to the server // ret = connect(sock, (SOCKADDR *) &sa_ipx_server, sizeof sa_ipx_server); if (ret == SOCKET_ERROR) { printf("connect() failed: %d\n", WSAGetLastError()); return; } printf("Connected to Server Address - "); PrintIpxAddress( sa_ipx_server.sa_netnum, sa_ipx_server.sa_nodenum ); // // Send data to the specfied server // memset(chBuffer, '*', dwNumBytes); chBuffer[dwNumBytes] = 0; for(i=0; i < dwNumToSend ;i++) { ret = SendData(sock, chBuffer); if (ret == 0) return; else if (ret == -1) return; printf("%d bytes of data sent\n", ret); // // Receive data from the server // ret = ReceiveData(sock, chBuffer); if (ret == 0) return; else if (ret == -1) return; // // Print the contents of received data // chBuffer[ret] = '\0'; printf("%d bytes of data received->%s\n", ret, chBuffer); } } else { // Send a datagram to the specified server // memset(chBuffer, '*', dwNumBytes); chBuffer[dwNumBytes] = 0; for(i=0; i < dwNumToSend ;i++) { ret = SendDatagram(sock, chBuffer, &sa_ipx_server); if (ret == -1) return; printf("%d bytes of data sent\n", ret); // // Receive a datagram from the server // cb = sizeof(sa_ipx_server); ret = ReceiveDatagram(sock, chBuffer, &sa_ipx_server, &cb); if (ret == -1) return; // // Print the contents of received data // chBuffer[ret] = '\0'; printf("%d bytes of data received->%s\n", ret, chBuffer); } } return; }
// // Server () performs the connection-less/connection-oriented server // related tasks // void Server() { SOCKADDR_IPX sa_ipx, // Server address sa_ipx_client; // Client address char chBuffer[MAX_DATA_LEN]; // Data buffer int ret, cb; CreateSocket ( ); // // Bind to a local address and endpoint // BindSocket(&sa_ipx, pszLocalAddress, pszServerEndpoint); // // Check the Specified protocol. Call listen(), accept() if a connection // oriented protocol is specified // if (chProtocol != 'd') { ret = listen(sock, 5); if (ret == SOCKET_ERROR) { printf("listen() failed: %d\n", WSAGetLastError()); return; } printf("Waiting for a Connection...\n"); // // Wait for a connection // while (1) { cb = sizeof(sa_ipx_client); newsock = accept(sock, (SOCKADDR *) &sa_ipx_client, &cb); if (newsock == INVALID_SOCKET) { printf("accept() failed: %d\n", WSAGetLastError()); return; } // Print the address of connected client // printf("Connected to Client Address - "); PrintIpxAddress(sa_ipx_client.sa_netnum, sa_ipx_client.sa_nodenum); while (1) { // Receive data on newly created socket // ret = ReceiveData(newsock, chBuffer); if (ret == 0) break; else if (ret == -1) return; // // Print the contents of received data // chBuffer[ret] = '\0'; printf("%d bytes of data received->%s\n", ret, chBuffer); // // Send data on newly created socket // ret = SendData(newsock, chBuffer); if (ret == 0) break; else if (ret == -1) return; printf("%d bytes of data sent\n", ret); } closesocket(newsock); } } else // Server will recv and send datagrams { // Receive a datagram on the bound socket // while (1) { cb = sizeof (sa_ipx_client); ret = ReceiveDatagram(sock, chBuffer, &sa_ipx_client, &cb); if (ret == -1) return; // // Print the contents of received datagram and the senders address // printf("Message Received from Client Address - "); PrintIpxAddress( sa_ipx_client.sa_netnum, sa_ipx_client.sa_nodenum ); chBuffer[ret] = '\0'; printf("%d bytes of data received->%s\n", ret, chBuffer); // // Echo the datagram on the bound socket to the client // ret = SendDatagram(sock, chBuffer, &sa_ipx_client); if (ret == -1) return; printf("%d bytes of data sent\n", ret); } closesocket(newsock); } return; }
int main(int argc, char *argv[]) { int rc; int Desc; int tm; int Port, Ip; char Tampon[80]; int returned_from_longjump; unsigned int time_interval; int ret; int Compteur = 0; struct sockaddr_in psoo; /* o = origine */ struct sockaddr_in psos; /* s = serveur */ struct sockaddr_in psor; /* r = remote */ struct Requete UneRequete; char *pret; memset(&psoo, 0, sizeof(struct sockaddr_in)); memset(&psos, 0, sizeof(struct sockaddr_in)); memset(&psor, 0, sizeof(struct sockaddr_in)); if (argc!=5) { printf("cli client portc serveur ports\n"); exit(1); } Desc = CreateSockets(&psoo, &psos, argv[1], atoi(argv[2]), argv[3], atoi(argv[4])); if (Desc == -1) perror("CreateSockets:"); else fprintf(stderr, "CreateSockets %d !!!!\n", Desc); Ip = GetIP(&psoo); Port = GetPort(&psoo); memset(Tampon, 0, sizeof(Tampon)); Ipv4ToS(Ip, Tampon); printf("Adresse Ip du client %s : Port %d \n", Tampon, Port); Compteur = 0; printf(" GetPid %d \n", getpid()); while(1) { /* ici setjmp */ returned_from_longjump = sigsetjmp(env, 1); /* <> 0 pour sauver le masque, ne surtout pas utiliser setjmp */ if (returned_from_longjump!= 0) switch (returned_from_longjump) { case SIGINT: printf("longjumped from interrupt %d\n", SIGINT); exit(0); break; case SIGALRM: printf("longjumped from alarm %d\n", SIGALRM); printf("Alarme numero %d \n", NbrAlarmes); if (NbrAlarmes==4) exit(0); break; }; signal(SIGINT, signal_handler); signal(SIGUSR1, signal_handler); signal(SIGALRM, signal_alarm); UneRequete.Compteur = Compteur; UneRequete.Type = Question; strncpy(UneRequete.Message, "Hello Multiclient", sizeof(UneRequete.Message)); rc = SendDatagram(Desc, &UneRequete, sizeof(struct Requete), &psos); fprintf(stderr, "Turlututu \n"); if (rc == -1) perror("SendDatagram"); else fprintf(stderr, "Envoi du message %d avec %d bytes\n", UneRequete.Compteur, rc); memset(&UneRequete, 0, sizeof(struct Requete)); tm = sizeof(struct Requete); time_interval = 5; ret = alarm(time_interval); // signal(SIGALRM, signal_alarm); tm = sizeof(UneRequete); printf("Ecoute sur le descripeur %d \n", Desc); rc = ReceiveDatagram(Desc, &UneRequete, tm, &psor); fprintf(stderr, "raison:%d \n", rc); pret = strerror(errno); fprintf(stderr, "Message est : %s \n", pret); ret = alarm(0); if (rc == -1) { perror("ReceiveDatagram"); } else { fprintf(stderr, "bytes:%d:%s\n", rc, UneRequete.Message); } Compteur++; sleep(5); } close(Desc); }