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; }
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"); } }