<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年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(25)

    隨筆分類(74)

    文章分類(1)

    收藏夾(277)

    在線工具

    在線資料

    最新隨筆

    搜索

    •  

    積分與排名

    • 積分 - 217561
    • 排名 - 260

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜


    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 閱讀(668) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品无码你懂的| 97碰公开在线观看免费视频| 亚洲AV日韩精品一区二区三区| 亚洲H在线播放在线观看H| 99在线免费观看视频| 亚洲国产另类久久久精品黑人| 免费一区二区无码视频在线播放| 午夜视频在线观看免费完整版| 亚洲国产成人综合| 中文字幕免费视频一| 亚洲视频在线观看一区| a级日本高清免费看| 亚洲综合图色40p| 一个人看的在线免费视频| 国产免费爽爽视频免费可以看| 亚洲欧洲av综合色无码| 久久久久国色AV免费看图片| 亚洲免费电影网站| 1000部拍拍拍18勿入免费凤凰福利 | 国产亚洲精品免费| 亚洲国产精品99久久久久久| 最近中文字幕mv手机免费高清| 亚洲一级毛片免费看| 四虎永久在线精品免费观看视频| 亚洲第一页中文字幕| 182tv免费观看在线视频| 亚洲自偷精品视频自拍| 69av免费观看| 亚洲国产高清视频在线观看| 欧洲一级毛片免费| 亚洲午夜电影在线观看| 无限动漫网在线观看免费 | 18禁黄网站禁片免费观看不卡| 色播亚洲视频在线观看| 最近中文字幕完整免费视频ww| 亚洲精品无码久久久久久久| 69成人免费视频| 久久国产亚洲精品| 国产美女被遭强高潮免费网站| 特级毛片A级毛片100免费播放| 亚洲国产一区二区三区|