CLIENT /////////////// #include #include #include #include #include #include int main() { int c,l; struct sockaddr_in server,server2; uint16_t n,r,suma; c = socket(AF_INET, SOCK_DGRAM, 0); if (c < 0) { printf("Eroare la crearea socketului client\n"); return 1; } memset(&server, 0, sizeof(server)); server.sin_port = htons(1234); server.sin_family = AF_INET; server.sin_addr.s_addr = inet_addr("127.0.0.1"); scanf("%hu",&n); n=htons(n); sendto(c, &n, sizeof(n), 0, (struct sockaddr *) &server, sizeof(server)); l = sizeof(server2); memset(&server2, 0, sizeof(server2)); recvfrom(c, &r, sizeof(r), MSG_WAITALL, (struct sockaddr *) &server2, &l); r=ntohs(r); printf("r=%hu\n",r); do{ scanf("%hu",&n); n=htons(n); sendto(c, &n, sizeof(n), 0, (struct sockaddr *) &server2, sizeof(server2)); }while(n!=0); recvfrom(c, &suma, sizeof(suma), MSG_WAITALL, (struct sockaddr *) &server2, &l); suma=ntohs(suma); printf("suma=%hu\n",suma); close(c); } SERVER ///////////////////////// #include #include #include #include #include #include void deservire_client(int s,struct sockaddr_in client,uint16_t n) { uint16_t suma=n; int s2,l; s2 = socket(AF_INET, SOCK_DGRAM, 0); printf("suma=%hu\n",n); uint16_t r; struct sockaddr_in server2; do{r=rand()%65536; memset(&server2, 0, sizeof(server2)); server2.sin_port = htons(r); server2.sin_family = AF_INET; server2.sin_addr.s_addr = INADDR_ANY; }while (bind(s2, (struct sockaddr *) &server2, sizeof(server2)) < 0); printf("r=%hu\n",r); r=htons(r); sendto(s2, &r, sizeof(r), 0, (struct sockaddr *) &client, sizeof(client)); do{ l = sizeof(client); memset(&client, 0, sizeof(client)); recvfrom(s2, &n, sizeof(n), MSG_WAITALL, (struct sockaddr *) &client, &l); n=ntohs(n); suma=suma+n; printf("suma=%hu\n",suma); }while(n!=0); suma=htons(suma); sendto(s2, &suma, sizeof(suma), 0, (struct sockaddr *) &client, sizeof(client)); close(s2); } int main() { int s; struct sockaddr_in server, client; int l; uint16_t n; s = socket(AF_INET, SOCK_DGRAM, 0); if (s < 0) { printf("Eroare la crearea socketului server\n"); return 1; } memset(&server, 0, sizeof(server)); server.sin_port = htons(1234); server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; if (bind(s, (struct sockaddr *) &server, sizeof(server)) < 0) { printf("Eroare la bind\n"); return 1; } while(1){ l = sizeof(client); memset(&client, 0, sizeof(client)); recvfrom(s, &n, sizeof(n), MSG_WAITALL, (struct sockaddr *) &client, &l); n=ntohs(n); printf("n=%hu\n",n); if(fork()==0) { deservire_client(s,client,n); } } close(s); }