النتائج 1 إلى 3 من 3

الموضوع: كيف أصنع الوكيل من الخادم والعميل؟

  1. #1
    عضوية جديدة
    تاريخ التسجيل
    Aug 2010
    المشاركات
    73
    الدولة: Saudi Arabia
    معدل تقييم المستوى
    0

    كيف أصنع الوكيل من الخادم والعميل؟

    السلام عليكم...
    لدي برنامجان مكتوبان بلغة السي أحدهما Server والآخر Client وهما يعملان مع بعضهما بشكل جيد.
    يستخدمان بروتوكول UDP

    في صفحة Terminal في Linux أقوم بكتابة الأمر التالي في شاشة:
    كود:
    ./server 8000
    والأمر التالي في شاشة أخرى
    كود:
      ./Client 127.0.0.1 8000
    فيقوم العميل بإرسال 100 حزمة إلى الخادم على المنفذ 8000 ويستقبلها الخادم من المنفذ ذاته.

    ما أريد أن أعمله هو كتابة برنامج يكون وسيطا (وكيلا) (Proxy) بين الاثنين ...
    بحيث يستقبل الحزم من العميل ويرسلها إلى الخادم.

    أعلم أنه سيكون برنامجا يجمع الاثنين، وقد فعلت ذلك، لكن المشكلة أن المعطيات Parameters التي تعطى له يجب أن تكون 3 معطيات :
    1 ) رقم المنفذ الذي يرسل منه العميل، وهو ذاته الذي يستقبل منه الوكيل.
    2) رقم المنفذ الذي يستقبل منه الخادم ، وهو ذاته الذي يرسل منه الوكيل.
    3 ) عنوان IP الخاص بالخادم.

    كيف سأكتب أمر الوكيل بهذه المعطيات الثلاثة ، وماهي التعديلات التي ينبغي أن أعدلها عليه حتى يعمل بشكل جيد.
    الخادم والعميل ومحاولتي لكتابة الوكيل في الردود أدناه.
    أرجو أن أجد لديكم إجابة شافية ، فأنا أحتاج لعمل وكيل آخر أيضا ببروتوكول ICMP بعد البحث عن خادم وعميل يستخدمان ICMP.


    ملاحظة : أنا أعمل على شبكة افتراضية يقدمها موقع www.planet-lab.org ولي صلاحية تنفيذ الأكواد على عدد من الأجهزة حول العالم.

  2. #2
    عضوية جديدة
    تاريخ التسجيل
    Aug 2010
    المشاركات
    73
    الدولة: Saudi Arabia
    معدل تقييم المستوى
    0

    رد: كيف أصنع الوكيل من الخادم والعميل؟

    هذا كود العميل

    كود:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <sys/types.h>
    #include <sys/socket.h> 
    //#include "clientserver.h" 
    
    #define BUFLEN 512
    int main(int argc, char **argv)
    {
    struct sockaddr_in  si_server;
    int                 port, s, i, slen=sizeof(si_server);
    char                buf[BUFLEN];
    char                srv_addr[16]; 
    
    memset(srv_addr, 0, 16);
    
    if(argc<3)
    {
    fprintf(stderr, "Usage: %s <destination IP address> <port number>\n", argv[0]);
    exit(EXIT_FAILURE);
    } 
    
    port=atoi(argv[2]);
    printf("port = %d\n", port);
    if(port<1024)
    {
    fprintf(stderr, "Usage: %s <destination IP address> <port number>\n", argv[0]);
    fprintf(stderr, "\twhere <port number> shall be > 1023\n");
    exit(EXIT_FAILURE);
    }
    
    
     
    if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
    {
    perror("socket");
    exit(EXIT_FAILURE);
    }
            memcpy(srv_addr, argv[1], strlen(argv[1])); 
    
    memset((char *) &si_server, 0, sizeof(si_server)); 
    
    si_server.sin_family   =  AF_INET;
    si_server.sin_port     =  htons(port);
    if (inet_aton(srv_addr, &si_server.sin_addr)==0) 
    {
    fprintf(stderr, "inet_aton() failed\n");
    exit(EXIT_FAILURE);
    }
        
     
    
    
    if(argc==4)  
    
    {
    sprintf(buf, "%s", argv[3]);
    if (sendto(s, buf, strlen(argv[3]), 0, (struct sockaddr *)&si_server, slen)==-1)
    {
    perror("sendto()");
    exit(EXIT_FAILURE);
    }
    }
    
    else 
    
    {
    for (i=0; i<100; i++)
    {
    printf("Sending packet %d\n", i);
    sprintf(buf, "This is packet %d\n", i);
    if (sendto(s, buf, BUFLEN, 0, (struct sockaddr *)&si_server, slen)==-1)
    {
    perror("sendto()");
    exit(EXIT_FAILURE);
    }
    }
    }
    
    close(s);
    exit (EXIT_SUCCESS);
    }

  3. #3
    عضوية جديدة
    تاريخ التسجيل
    Aug 2010
    المشاركات
    73
    الدولة: Saudi Arabia
    معدل تقييم المستوى
    0

    رد: كيف أصنع الوكيل من الخادم والعميل؟

    هذه محاولتي لكتابة كود الوكيل:

    كود:
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    //#include "clientserver.h"
    
    int w =0;
    #define BUFLEN 512
    
    int main(int argc, char **argv)
    {
    
        struct sockaddr_in   si_local, si_remote;
        int                  s;
        int                  port;
        unsigned int         slen;
        char                 buf[BUFLEN];
    if(w==0)//stupid line
    {//stupid line
    
        slen     =   sizeof(si_remote);
        if(argc!=2)
        {
            fprintf(stderr, "Usage: %s <port number>\n", argv[0]);
            exit(EXIT_FAILURE);
        }
    
        port=atoi(argv[1]);
        if(port<1024)
        {
            fprintf(stderr, "Usage: %s <port number>\n", argv[0]);
            fprintf(stderr, "\twhere <port number> shall be > 1023\n");
            exit(EXIT_FAILURE);
        }
    
    
        if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
        {
            perror("socket");
            exit(EXIT_FAILURE);
        }
        
    
    
        memset((char *) &si_local, 0, sizeof(si_local));
        si_local.sin_family       =  AF_INET;
        si_local.sin_port         =  htons(port);
        si_local.sin_addr.s_addr  =  htonl(INADDR_ANY);
        if (bind(s, (const struct sockaddr *)&si_local, sizeof(si_local))==-1)
        {
            perror("bind");
            exit(EXIT_FAILURE);
        }
        
        int long q= 100;
        while(q>0)
        {
            q--;
            memset(buf, 0, sizeof(char)*BUFLEN);
    
            if (recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *)&si_remote, &slen)==-1)
            {
                perror("recvfrom()");
                exit(EXIT_FAILURE);
            }
     
    
            if(strstr(buf, ".quit.")!=NULL)
            {
                printf("\".quit.\" Received \n");
                printf("Exiting\n");
                break;
            }
            else
            
            {
                printf("Received packet from %s:%d\n", inet_ntoa(si_remote.sin_addr),
                                    ntohs(si_remote.sin_port));
                printf("Data: %s\n", buf);
            }
        }
    w++;//stupid line
    // Here some code have to added.
    }//stupid line
    //*********************************************Client************************************
        printf("Hello Client Part\n");
        struct sockaddr_in  si_server;
    //    int                 port, s, i, slen=sizeof(si_server);
    //    char                buf[BUFLEN];
        char                srv_addr[16]; 
    
        memset(srv_addr, 0, 16);
        
        if(argc<3)
        {
        fprintf(stderr, "Usage: %s <destination IP address> <port number>\n", argv[0]);
        exit(EXIT_FAILURE);
        } 
    
        port=atoi(argv[2]);
        printf("port = %d\n", port);
        if(port<1024)
        {
            fprintf(stderr, "Usage: %s <destination IP address> <port number>\n", argv[0]);
            fprintf(stderr, "\twhere <port number> shall be > 1023\n");
            exit(EXIT_FAILURE);
        }
    
    
     
        if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
        {
            perror("socket");
            exit(EXIT_FAILURE);
        }
            memcpy(srv_addr, argv[1], strlen(argv[1])); 
    
        memset((char *) &si_server, 0, sizeof(si_server)); 
    
        si_server.sin_family   =  AF_INET;
        si_server.sin_port     =  htons(port);
    
        if (inet_aton(srv_addr, &si_server.sin_addr)==0) 
        {
            fprintf(stderr, "inet_aton() failed\n");
            exit(EXIT_FAILURE);
        }
            
     
        if(argc==4)  
        {
            sprintf(buf, "%s", argv[3]);
            if (sendto(s, buf, strlen(argv[3]), 0, (struct sockaddr *)&si_server, slen)==-1)
            {
                perror("sendto()");
                exit(EXIT_FAILURE);
            }
        }
    
        else 
        {
            int x;
            for (x=0; x<100; x++)
            {
                printf("Sending packet %d\n", x);
                sprintf(buf, "This is packet %d\n", x);
                if (sendto(s, buf, BUFLEN, 0, (struct sockaddr *)&si_server, slen)==-1)
                {
                    perror("sendto()");
                    exit(EXIT_FAILURE);
                }
            }
        }
    
    close(s);
    exit (EXIT_SUCCESS);
    w=0;//stupid line    
        return 0;
    }

المواضيع المتشابهه

  1. أصنع نظارة 3D فى منزلك
    بواسطة shaftora في المنتدى الأرشيف
    مشاركات: 15
    آخر مشاركة: 29-02-2012, 02:02
  2. حسبنا الله و نعم الوكيل
    بواسطة Art Space في المنتدى البرمجه والتصميمات الفنيه ( الجرافيكس )
    مشاركات: 8
    آخر مشاركة: 08-08-2006, 23:07
  3. كيف أصنع GIF متحرك؟
    بواسطة leitmotive في المنتدى البرمجه والتصميمات الفنيه ( الجرافيكس )
    مشاركات: 6
    آخر مشاركة: 03-06-2005, 22:52
  4. كيف أصنع Bootable CD ؟
    بواسطة الخطيب في المنتدى الأرشيف
    مشاركات: 2
    آخر مشاركة: 26-05-2003, 10:31

المفضلات

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •