Exemplo n.º 1
0
int
main (int argc, const char *argv[])
{
    int fd;
    unsigned short port;
    port = TS_PORT;
    char *addr = TS_SERVER_ADDRESS;
    pid_t child_pid;
    
    //step 1:
    fd = get_sock_fd ();
    
    struct sockaddr_in my_addr;
    memset (&my_addr, 0, sizeof (my_addr));
    
    //step 2:
    bind_addr (fd, addr, port, &my_addr);
    
    //step 3:
    server_listen (fd, BACKLOG);
    
    
    //step 4:
    int new_fd;
    struct sockaddr_in new_addr;
    memset (&new_addr, 0, sizeof (new_addr));
    socklen_t new_addr_len = 1;
    
    signal(SIGCHLD, sig_chld);
    signal(SIGINT, sig_int);
    
    while (1)
    {
        if ((new_fd =
             accept (fd, (struct sockaddr *) &new_addr, &new_addr_len)) == -1)
        {
            if (errno == EINTR) {
                continue;
            }else {
                perror ("accept error");
                close (fd);
            }
        }
        else
        {
            if ((child_pid = fork()) == 0) {
                close(fd);
                server_client (new_fd);
                exit(0);
            }
            close(new_fd);
        }
    }
    
    return 0;
}
Exemplo n.º 2
0
void private_chat ( send_info *send,int newfd)//私聊
{
			char dest[BUF_SIZE]={'\0'};
			int tag_id = 0;//储存客户端appept 套接字的返回值
			tag_id = get_sock_fd(send->id);
			if( (tag_id != 0 ) && (tag_id != newfd))
     			{
 	      			format_buf_private (dest ,send->buf ,newfd,send);
				printf("\n私聊 %s" ,dest);//在服务器显示私聊内容
 				write(tag_id ,dest ,strlen(dest)+1); //通过tag_id传给客户端 
 			}
			else if( tag_id == newfd)
			{	
				sprintf(dest,"私聊对象不能是自己 ( ̄▽ ̄#) = ﹏﹏\n\n" );
 				write(tag_id ,dest ,strlen(dest)+1); //通过tag_id传给客户端
				DEBUG("私聊对象不能是自己\n\n"); 
			}
 			else if(tag_id == 0 ){
				sprintf(dest,"没有此用户,请核对! Σ( ° △ °|||)︴\n\n" );
 				write(newfd ,dest ,strlen(dest)+1); //通过tag_id传给客户端
 				DEBUG("没有此用户\n\n");
			}

}