<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 22  文章 - 467  trackbacks - 0
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(25)

    隨筆分類(74)

    文章分類(1)

    收藏夾(277)

    在線工具

    在線資料

    最新隨筆

    搜索

    •  

    積分與排名

    • 積分 - 218199
    • 排名 - 261

    最新評論

    閱讀排行榜

    評論排行榜


    The Server.c
    #include<stdio.h>
    #include
    <stdlib.h>
    #include
    <sys/types.h>
    #include
    <sys/stat.h>
    #include
    <netinet/in.h>
    #include
    <sys/socket.h>
    #include
    <string.h>
    #include
    <unistd.h>
    #include
    <signal.h>
    #include
    <sys/ipc.h>
    #include
    <errno.h>
    #include
    <sys/shm.h>
    #include
    <time.h>
    #define PERM S_IRUSR|S_IWUSR
    #define MYPORT 3490
    #define BACKLOG 10 
    #define WELCOME "|----------Welcome to the chat room! ----------|"

    //int sockfd;
    /*void quit(int signo)
    {
        close(sockfd);
        printf("welcome come to the room again!\n");
        exit(0);
    }
    */


    //type int to char*
    void itoa(int i,char*string)
    {
            
    int power,j;
            j
    =i;
            
    for(power=1;j>=10;j/=10)
                    power
    *=10;
            
    for(;power>0;power/=10)
            
    {
                    
    *string++='0'+i/power;
                    i
    %=power;
            }

            
    *string='\0';
    }


    //get current system time
    void get_cur_time(char * time_str)
    {
            time_t timep;
            
    struct tm *p_curtime;
            
    char *time_tmp;
            time_tmp
    =(char *)malloc(2);
            memset(time_tmp,
    0,2);

            memset(time_str,
    0,20);
            time(
    &timep);
            p_curtime 
    = localtime(&timep);
            strcat(time_str,
    " (");
            itoa(p_curtime
    ->tm_hour,time_tmp);
            strcat(time_str,time_tmp);
            strcat(time_str,
    ":");
            itoa(p_curtime
    ->tm_min,time_tmp);
            strcat(time_str,time_tmp);
            strcat(time_str,
    ":");
            itoa(p_curtime
    ->tm_sec,time_tmp);
            strcat(time_str,time_tmp);
            strcat(time_str,
    ")");    
            free(time_tmp);
    }


    //Create Share Memory
    key_t shm_create()    
    {
            key_t shmid;
            
    //shmid = shmget(IPC_PRIVATE,1024,PERM);
            if((shmid = shmget(IPC_PRIVATE,1024,PERM)) == -1)
            
    {
                    fprintf(stderr,
    "Create Share Memory Error:%s\n\a",strerror(errno));
                    exit(
    1);
            }

            
    return shmid;
    }


    int bindPort(unsigned short int port)
    {        
            
    int sockfd;
            
    struct sockaddr_in my_addr;
            sockfd 
    = socket(AF_INET,SOCK_STREAM,0);
            my_addr.sin_family 
    = AF_INET;
            my_addr.sin_port 
    = htons(port);
            my_addr.sin_addr.s_addr 
    = INADDR_ANY;
            bzero(
    &(my_addr.sin_zero),0);

            
    if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr)) == -1)
            
    {
                    perror(
    "bind");
                    exit(
    1);
            }

            printf(
    "bing success!\n");
            
    return sockfd;
    }


    int main(int argc, char *argv[])
    {
            
    int sockfd,clientfd,sin_size,recvbytes;
            pid_t pid,ppid;        
            
    char *buf, *r_addr, *w_addr, *temp, *time_str;//="\0";    
            struct sockaddr_in their_addr;
            key_t shmid;

            shmid 
    = shm_create();    //Create Share Memory

            temp 
    = (char *)malloc(255);
            time_str
    =(char *)malloc(20);    

        
    /*if(signal(SIGUSR1, quit) == SIG_ERR)    
        {
            perror("Can\'t set SIGUSR1 signal action");
            exit(1);
        }
    */


            sockfd 
    = bindPort(MYPORT);
            
            
    while(1)
            
    {                    
                    
    if(listen(sockfd,BACKLOG) == -1)
                    
    {
                            perror(
    "listen");
                            exit(
    1);
                    }

                    printf(
    "listening\n");
                    
    if((clientfd = accept(sockfd,(struct sockaddr*)&their_addr,&sin_size)) == -1)
                    
    {
                            perror(
    "accept");
                            exit(
    1);
                    }

                    printf(
    "accept from:%s\n",inet_ntoa(their_addr.sin_addr));
                    send(clientfd,WELCOME,strlen(WELCOME),
    0);
                    buf 
    = (char *)malloc(255);
                    
                    ppid 
    = fork();
                    
    if(ppid == 0)
                    
    {

                            
    //printf("ppid=0\n");
                            pid = fork();                        
                            
    while(1)
                            
    {
                                    
    if(pid > 0)
                                    
    {

                                            memset(buf,
    0,255);
                                            
    //printf("recv\n");
                                            
    //sleep(1);
                                            if((recvbytes = recv(clientfd,buf,255,0)) <= 0)
                                            
    {
                                                    perror(
    "recv1");
                                                    close(clientfd);
                                                    raise(SIGKILL);
                                                    exit(
    1);
                                            }
        
                                            
    //write buf's data to share memory
                                            w_addr = shmat(shmid, 00);
                                            memset(w_addr, 
    '\0'1024);
                                            strncpy(w_addr, buf, 
    1024);

                                            get_cur_time(time_str);
                                            strcat(buf,time_str);
                                            printf(
    " %s\n",buf);

                                    }

                                    
    else if(pid == 0)
                                    
    {
                                            
    //scanf("%s",buf);
                                            sleep(1);
                                            r_addr 
    = shmat(shmid, 00);
                                            
    //printf("---%s\n",r_addr);
                                            
    //printf("cmp:%d\n",strcmp(temp,r_addr));
                                            if(strcmp(temp,r_addr) != 0)
                                            
    {
                                                    strcpy(temp,r_addr);
                                                    get_cur_time(time_str);                                                
                                                    strcat(r_addr,time_str);
                                                
    //printf("discriptor:%d\n",clientfd);
                                                    
    //if(send(clientfd,buf,strlen(buf),0) == -1)
                                                    if(send(clientfd,r_addr,strlen(r_addr),0== -1)
                                                    
    {
                                                            perror(
    "send");
                                                    }

                                                    memset(r_addr, 
    '\0'1024);
                                                    strcpy(r_addr,temp);
                                                    
    //
                                            }

                                            
    /*get_cur_time(time_str);
                                            printf("time:%s\n",time_str);
                                            strcat(r_addr,time_str);
    */

                                    }

                                    
    else
                                            perror(
    "fork");
                            }

                    }
        
            }

            printf(
    "------------------------------\n");
            free(buf);
            close(sockfd);
            close(clientfd);

            
    return 0;
    }


    The Client.c

    #include<stdio.h>
    #include
    <netinet/in.h>
    #include
    <sys/socket.h>
    #include
    <sys/types.h>
    #include
    <string.h>
    #include
    <stdlib.h>
    #include
    <netdb.h>
    #include
    <unistd.h>
    #include
    <signal.h>
    #include
    <time.h>



    int main(int argc, char *argv[])
    {
            
    struct sockaddr_in clientaddr;
            pid_t pid;
            
    int clientfd,sendbytes,recvbytes;
            
    struct hostent *host;
            
    char *buf,*buf_r;

            
    if(argc < 4)
            
    {
                printf(
    "usage:\n");
                printf(
    "%s host port name\n",argv[0]);
                exit(
    1);
            }


            host 
    = gethostbyname(argv[1]);
            
    if((clientfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
            
    {
                    perror(
    "socket\n");
                    exit(
    1);
            }

            clientaddr.sin_family 
    = AF_INET;
            clientaddr.sin_port 
    = htons((uint16_t)atoi(argv[2]));
            clientaddr.sin_addr 
    = *((struct in_addr *)host->h_addr);
            bzero(
    &(clientaddr.sin_zero),0);
            
    if(connect(clientfd,(struct sockaddr *)&clientaddr,sizeof(struct sockaddr)) == -1)
            
    {
                    perror(
    "connect\n");
                    exit(
    1);
            }


            buf
    =(char *)malloc(120);
            memset(buf,
    0,120);
        
            buf_r
    =(char *)malloc(100);

            
    if( recv(clientfd,buf,100,0== -1)
            
    {
                    perror(
    "recv:");
                    exit(
    1);
            }

            printf(
    "\n%s\n",buf);

            pid 
    = fork();
            
    while(1)
            
    {
                    
    if(pid > 0){

                            
    //get_cur_time(time_str);

                            strcpy(buf,argv[
    3]);
                            strcat(buf,
    ":");
                            memset(buf_r,
    0,100);
                            
    //gets(buf_r);
                            fgets(buf_r,100,stdin);
                            strncat(buf,buf_r,strlen(buf_r)
    -1);
                            
    //strcat(buf,time_str);
                            
    //printf("---%s\n",buf);
                            if((sendbytes = send(clientfd,buf,strlen(buf),0)) == -1)
                            
    {
                                    perror(
    "send\n");
                                    exit(
    1);
                            }

                    }

                    
    else if(pid == 0)
                    
    {
                            
                            memset(buf,
    0,100);
                            
    if(recv(clientfd,buf,100,0<= 0)
                            
    {
                                    perror(
    "recv:");
                                    close(clientfd);
                                    raise(SIGSTOP);
                                    exit(
    1);
                            }

                            printf(
    "%s\n",buf);
                    }

                    
    else
                            perror(
    "fork");
            }

            close(clientfd);
            
    return 0;                
    }

    Can you help to modify this from using Sockets to using Pipes and Daemon Processes?
    posted on 2011-06-24 15:46 ApolloDeng 閱讀(679) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲人成网站在线播放2019 | 国产亚洲成在线播放va| 久久经典免费视频| 亚洲欧洲日本精品| 国语成本人片免费av无码| 国产成人亚洲精品| 最近2019中文字幕mv免费看| 久久精品国产亚洲av麻豆蜜芽| 国产v精品成人免费视频400条| 欧洲 亚洲 国产图片综合| 成人性生交大片免费看午夜a| 亚洲av日韩综合一区二区三区| 国产一区在线观看免费| 一个人看的www在线免费视频| 亚洲综合区小说区激情区| 国产自国产自愉自愉免费24区 | 91成人免费在线视频| 亚洲av日韩av综合| 国产一卡二卡≡卡四卡免费乱码| 深夜福利在线视频免费| 日韩va亚洲va欧洲va国产| 免费成人激情视频| 国产精品亚洲а∨无码播放麻豆| 国产国拍亚洲精品福利| 美女在线视频观看影院免费天天看| 亚洲一区中文字幕久久| 成人黄页网站免费观看大全| 看全免费的一级毛片| 亚洲gv猛男gv无码男同短文| 嫖丰满老熟妇AAAA片免费看| 成人婷婷网色偷偷亚洲男人的天堂| MM131亚洲国产美女久久| 57pao一国产成视频永久免费| 亚洲欧美成人av在线观看| 国产亚洲精品福利在线无卡一| 99爱在线观看免费完整版| MM1313亚洲国产精品| 亚洲AV无码不卡无码| 日韩免费高清视频网站| 99视频在线免费观看| 亚洲性无码一区二区三区|