kinve 4 rokov pred
commit
4eeee0a111
16 zmenil súbory, kde vykonal 6181 pridanie a 0 odobranie
  1. 1710 0
      2.c
  2. BIN
      33/3
  3. 3029 0
      33/q
  4. 44 0
      Makefile
  5. 1 0
      README.md
  6. 57 0
      clien.c
  7. 19 0
      include/debug.h
  8. 281 0
      include/dlist.h
  9. 121 0
      include/mychat.h
  10. 96 0
      include/rtc.h
  11. 218 0
      include/tcp.h
  12. 227 0
      include/udp.h
  13. 60 0
      rtc/rtc_dev.c
  14. 221 0
      rtc/rtc_drv.c
  15. 71 0
      serv.c
  16. 26 0
      test.c

+ 1710 - 0
2.c

@@ -0,0 +1,1710 @@
+#include "include/tcp.h"
+#include "include/udp.h"
+#include "include/mychat.h"
+
+#if 1
+#define SELF_PORT_UDP 5002
+#define SELF_PORT_TCP 5003
+#define SELF_IP "192.168.188.136"		//自己IP
+#define OTHER_PORT_UDP 5004
+#define OTHER_PORT_TCP 5005
+#define OTHER_IP "192.168.188.136"		//他人IP
+#define BROADCAST_SEND_PORT_UDP 5200
+#define BROADCAST_RECV_PORT_UDP 5300
+#define BROADCAST_RECV_IP INADDR_ANY		//广播IP
+#define BROADCAST_SEND_IP INADDR_BROADCAST		//广播IP
+
+#else
+#define OTHER_PORT_UDP 5002
+#define OTHER_PORT_TCP 5003
+#define OTHER_IP "192.168.188.136"		//自己IP
+#define SELF_PORT_UDP 5004
+#define SELF_PORT_TCP 5005
+#define SELF_IP "192.168.188.136"		//他人IP
+#define BROADCAST_RECV_PORT_UDP 5200
+#define BROADCAST_SEND_PORT_UDP 5300
+#define BROADCAST_RECV_IP INADDR_ANY		//广播IP
+#define BROADCAST_SEND_IP INADDR_BROADCAST		//广播IP
+#endif
+
+#define NO_FIND 0
+#define HAVE_FIND 1
+
+LIST_HEAD(udp_data_head);	//聊天数据	
+struct list_head *p1 = NULL;
+struct servmsg_udp *pos1 = NULL;
+
+LIST_HEAD(udp_online_head);	//用户列表
+struct list_head *p2 = NULL;
+struct user_info *pos2 = NULL;
+
+LIST_HEAD(tcp_data_head);	//下载数据
+struct list_head *p3 = NULL;
+struct servmsg_tcp *pos3 = NULL;
+
+LIST_HEAD(tcp_accept_head);	//下载允许用户
+struct list_head *p4 = NULL;
+struct down_info *pos4 = NULL;
+
+int I_UDP=0;	//聊天数
+int J_UDP=0;	//上线数
+int I_TCP=0;	//文件数
+int J_TCP=0;	//下载数
+
+pthread_mutex_t lock1;
+char DATAIN[UDP_MAXSIZE+1];		//输入的内容
+int	DOWN_IF_IN = 0;			//下载确认输入
+int	CHANGE_AIM_IF_IN =0;	//改变对象选择输入
+int IF_CHAT_IN = 1;			//等待聊天输入完成
+int IF_ORD_IN = 1;			//等待命令输入完成
+
+int DOWN_READY_IF = 0;		//下载准备
+int IF_DOWN = 0;			//0已经下线,1已经上线
+
+char UP_WAY[50];	//上传路径
+char DOWN_WAY[50];	//下载路径
+char DOWN_NAME[20];	//下载文件名
+
+char MY_NAME[20];		//自己的名字
+struct sockaddr_in SELF_UDP_ADDR; //自己UDP信息,上线信息
+struct sockaddr_in SELF_TCP_ADDR; //自己TCP信息,上线信息
+
+//char AIM_NAME[20];		//目标的名字
+struct sockaddr_in OTHER_UDP_ADDR;//他人UDP信息,临时通讯地址
+struct sockaddr_in OTHER_TCP_ADDR;//他人TCP信息,临时通讯地址
+
+
+/**************************************以下UDP部分*******************************************/
+/*UDP发送数据*/
+void play(void);
+void up_ord(void);
+void order_or_chat(char *ord);
+char read_file(struct sockaddr_in *cin, char *way);
+char *addr_return_name(struct sockaddr_in *addr);
+struct sockaddr_in *name_reurn_addr(int type, char *aim_name);
+int send_online_info(void)
+{		
+	/*上线信息*/
+	struct msg_udp usron;
+	//填写数据包信息
+	usron.type_udp = LOG_IN;			//聊天类型	
+	strcpy(usron.self_name, MY_NAME);	//自己名字
+	strcpy(usron.aim_name, "*no*");		//目标名字
+	usron.data_size = strlen("*no*");	//消息大小
+	strcpy(usron.data, "*no*");			//数据
+	memcpy(&usron.self_addr_udp, &SELF_UDP_ADDR, sizeof(SELF_UDP_ADDR));	//自己UDP地址
+	memcpy(&usron.self_addr_tcp, &SELF_TCP_ADDR, sizeof(SELF_TCP_ADDR));	//自己TCP地址
+	strcpy((char *)&usron.aim_addr_udp, "*no*");	//目标地址
+
+	int ret = -1;
+	ret = udp_broad_send_to(BROADCAST_SEND_IP, BROADCAST_SEND_PORT_UDP, &usron, sizeof(usron));	//广播IP 255
+	if(ret == -1)
+	{
+		pr_debug("广播失败!\n");
+		return -1;
+	}
+
+	return 0;	
+}
+
+/*UDP登入*/
+void loading_udp(void)
+{
+	int ret = -1;
+	if (IF_DOWN == 0)
+	{
+		do
+		{
+			ret = send_online_info();
+			pr_debug("正在登入中...\n");
+		}
+		while (ret != 0);
+		IF_DOWN = 1;
+	}
+
+}
+
+int udp_linked_list_add(struct msg_udp *msg)
+{
+	switch (msg->type_udp)
+	{
+		case LOG_IN:	//登入
+		{
+			char *name_p = msg->self_name;
+			if(!(name_p && name_p > 0 && strlen(name_p) < 20 && strncmp(name_p, MY_NAME, strlen(MY_NAME)) != 0))
+				break;
+			int finded_name = NO_FIND;
+			struct list_head *n2 = NULL;
+			list_for_each_safe(p2, n2, &udp_online_head)		//安全遍历上线
+			{
+				pos2 = list_entry(p2, struct user_info, user_info_list);
+				if (strncmp(msg->self_name, pos2->user_name, strlen(pos2->user_name)) == 0)		
+				{
+					finded_name = HAVE_FIND;
+				}
+			}
+			if (finded_name != HAVE_FIND)	//没有找到此用户,则加入
+			{
+				struct user_info *newmsg;
+				newmsg = (struct user_info *)malloc(sizeof(struct user_info));
+				
+				//1.填写IP与端口
+				memcpy(&(newmsg->user_name), msg->self_name, sizeof(msg->self_name));	//客户名
+				(newmsg->id)++;															//id
+				memcpy(&(newmsg->cli_addr_udp), &msg->self_addr_udp, sizeof(msg->self_addr_udp));	//UDP IP地址与端口号					
+				memcpy(&(newmsg->cli_addr_tcp), &msg->self_addr_tcp, sizeof(msg->self_addr_tcp));	//TCP IP地址与端口号					
+				
+				//2.加入链表
+				list_add_tail(&newmsg->user_info_list, &udp_online_head);
+				J_UDP++;
+
+				//3.显示客户登入信息
+				printf("[%s]上线了!\n", msg->self_name);
+				
+				char addr[16];
+				u_short port1,port2;						
+				inet_ntop(AF_INET, (void *)&(newmsg->cli_addr_udp.sin_addr.s_addr), addr, sizeof(addr));
+				port1 = ntohs(newmsg->cli_addr_udp.sin_port);
+				port2 = ntohs(newmsg->cli_addr_tcp.sin_port);
+				printf("客户上线信息:%s:UDP[%d] TCP[%d]\n", addr, port1, port2);
+				
+				finded_name = NO_FIND;	
+				
+				//4.重新广播					
+				int ret = -1;
+				ret = send_online_info();	// 自己“已上线”信息
+				do{
+					sleep(3);
+					ret = send_online_info();	// 自己“已上线”信息
+				}while (ret == -1);
+
+
+			}
+					
+			break;				
+		}
+		case OFFLINE:	//下线
+		{	
+			struct list_head *n2 = NULL;
+			list_for_each_safe(p2, n2, &udp_online_head)		//安全遍历上线
+			{
+				pos2 = list_entry(p2, struct user_info, user_info_list);
+				if (strncmp(msg->self_name, pos2->user_name, strlen(pos2->user_name)) == 0)		
+				{
+					printf("[%s]下线!\n", pos2->user_name);				
+					
+					J_UDP--;
+					list_del(&pos2->user_info_list);	//删除用户	
+					free(pos2);
+				}
+			}
+
+			break;
+		}
+		case CHAT_ONE:	//私聊
+		{	
+			struct servmsg_udp *newmsg;
+			newmsg = (struct servmsg_udp *)malloc(sizeof(struct servmsg_udp));
+				
+			if(strncmp(msg->aim_name, MY_NAME, strlen(MY_NAME)) == 0) //接受的数据包,如果是发给自己的,就加入链表;否则丢弃
+			{
+				//1.添加尾部
+				memcpy(&(newmsg->recvmsg), msg, sizeof(struct msg_udp));	//数据
+							
+				//2.加入链表
+				list_add_tail(&newmsg->servmsg_udp_list, &udp_data_head);
+				I_UDP++;
+			}
+				
+			//修改聊天对象		
+			char *aim_name, *aim_name_of_other;
+			struct sockaddr_in *addr_udp_find;
+			aim_name = addr_return_name(&msg->self_addr_udp);
+			aim_name_of_other = addr_return_name(&OTHER_UDP_ADDR);
+			addr_udp_find = name_reurn_addr(1, aim_name);
+
+//			pr_debug("上个对话:%s, 将要对话:%s\n",aim_name,aim_name_of_other);
+			if(aim_name == NULL || addr_udp_find == NULL)
+				;	
+			else if (aim_name_of_other == NULL)
+			{
+				pr_debug("修改对象为:%s\n->",aim_name);
+				udp_info_check(addr_udp_find);
+				bzero(&OTHER_UDP_ADDR, sizeof(struct sockaddr_in));
+				memcpy(&OTHER_UDP_ADDR, addr_udp_find, sizeof(struct sockaddr_in));
+				aim_name = addr_return_name(&OTHER_UDP_ADDR);
+				pr_debug("现在对象为:%s\n",aim_name);
+			}
+			else if(strncmp(aim_name, aim_name_of_other, strlen(aim_name_of_other)) != 0)
+			{
+				char reply;
+				
+				printf("是否改变聊天对象为:[%s]? ++y/++n", aim_name);
+				
+				while(CHANGE_AIM_IF_IN != 1)
+					{
+						printf("等待输入...\n");
+						sleep(1);						
+					}					
+				reply = DATAIN[0];
+				CHANGE_AIM_IF_IN = 0;
+				
+				if(reply == 'y')
+				{
+					bzero(&OTHER_UDP_ADDR, sizeof(struct sockaddr_in));
+					memcpy(&OTHER_UDP_ADDR, addr_udp_find, sizeof(struct sockaddr_in));
+				}
+				else if (reply == 'n')
+				{
+					;
+				}
+			}
+
+
+			break;
+		}
+		case CHAT_ALL:	//群发
+		{	
+			struct servmsg_udp *newmsg;
+			newmsg = (struct servmsg_udp *)malloc(sizeof(struct servmsg_udp));
+			
+			//1.添加尾部
+			memcpy(&(newmsg->recvmsg), msg, sizeof(struct msg_udp));	//数据
+
+			//2.加入链表
+			list_add_tail(&newmsg->servmsg_udp_list, &udp_data_head);
+			I_UDP++;
+
+			break;
+		}
+		case REFRESH:	//列表  登入类型中 已加入
+		{	
+/*
+			pr_debug("[%s]请求列表!\n", msg->self_name);
+			
+			struct servmsg_udp *newmsg;
+			newmsg = (struct servmsg_udp *)malloc(sizeof(struct servmsg_udp));
+			//1.添加尾部
+			memcpy(&(newmsg->recvmsg), &msg, sizeof(msg));	//数据
+			
+			//2.修改类型,通过私聊发送
+			newmsg->recvmsg.type_udp = CHAT_ONE;
+			
+			//3.添加内容data
+			strcpy(newmsg->recvmsg.data, "用户列表:");
+			struct list_head *n2 = NULL;
+			list_for_each_safe(p2, n2, &udp_online_head)		//安全遍历上线
+			{						
+				pos2 = list_entry(p2, struct user_info, user_info_list);						
+				sprintf(newmsg->recvmsg.data, "[%s] [%s]", newmsg->recvmsg.data, pos2->user_name);										
+			}
+			sprintf(newmsg->recvmsg.data, "%s%c", newmsg->recvmsg.data, '\n');
+			pr_debug("用户列表:%s\n", newmsg->recvmsg.data);
+			//4.加入链表
+			list_add_tail(&newmsg->list, &udp_data_head);
+			I_UDP++;	
+*/
+			break;
+		}
+		case UPLOAD:	//上传
+		{
+			struct servmsg_udp *newmsg;
+			newmsg = (struct servmsg_udp *)malloc(sizeof(struct servmsg_udp));
+			/*1.填写IP与端口*/
+			memcpy(&(newmsg->recvmsg.self_name), msg->self_name, sizeof(msg->self_name));	//客户名
+			memcpy(&(newmsg->recvmsg.aim_addr_udp), &msg->aim_addr_udp, sizeof(msg->aim_addr_udp));		//IP地址与端口号
+			
+			/*3.填写数据*/
+			char *cut_p;
+			cut_p = strtok(msg->data, "_");
+			cut_p = strtok(NULL, "_");
+			sprintf(newmsg->recvmsg.data, "%s:%s\n", msg->self_name, cut_p);													
+			newmsg->recvmsg.data[UDP_MAXSIZE] = 0;
+			newmsg->recvmsg.data_size = strlen(newmsg->recvmsg.data);
+			pr_debug("UDP接收加入链表【%s】\n", cut_p);
+			/*3.填加到链表*/						
+			list_add_tail(&newmsg->servmsg_udp_list, &udp_data_head);
+			I_UDP++;
+
+			break;
+		}
+		case DOWNLOAD:	//下载
+		{
+			// 待续
+			/*1.下载列表*/
+			if (strncmp(msg->data, "list", 4) == 0)
+			{
+				//查找list
+				struct list_head *n1 = NULL;	
+				list_for_each_safe(p1, n1, &udp_data_head)			//安全遍历聊天
+				{
+					pos1 = list_entry(p1, struct servmsg_udp, servmsg_udp_list);
+					if (pos1->recvmsg.type_udp == UPLOAD)
+					{
+						udp_send_to(inet_ntoa(msg->aim_addr_udp.sin_addr),msg->aim_addr_udp.sin_port, \
+							&pos1->recvmsg, sizeof(pos1->recvmsg));
+					}
+				}
+			}
+
+			char read_file(struct sockaddr_in *cin, char *way);
+			/*2.遍历查找UPLOAD,修改接受者(不用删除下载链表)*/
+			if (strncmp(msg->data, "start", 5) == 0)
+			{
+				char *cut_p;
+				struct sockaddr_in aim_tcp_addr;//他人信息
+				cut_p = strtok(msg->data, ":");
+				cut_p = strtok(NULL, ":");
+				/********************根据UDP修改客户地址********************/
+				aim_tcp_addr.sin_family = AF_INET;
+				aim_tcp_addr.sin_port = msg->aim_addr_udp.sin_port;
+				aim_tcp_addr.sin_addr.s_addr = msg->aim_addr_udp.sin_addr.s_addr;
+				bzero(aim_tcp_addr.sin_zero, 8);	
+				/***********************************************************/
+				if (access(cut_p, F_OK) != 0)
+				{
+					read_file(&aim_tcp_addr, cut_p);
+				}
+				else
+					printf("文件不存在!\n");
+				
+			}
+			break;
+		}	
+		default:
+			break;			
+	}
+
+	return 0;
+}
+
+void *udp_linked_list_manage(void *arg)
+{
+	sleep(2);
+	pr_debug("UDP链表管理\n");
+	static int num_i=0, num_j=0;
+	while (1)
+	{
+		if (num_j != J_UDP)
+			pr_debug("** 上线:%d **\n", J_UDP);
+		/********************************************************************
+		if (num_i != I_UDP || num_j != J_UDP)
+			pr_debug("** 聊天:%d,上线:%d **\n", I_UDP, J_UDP);
+		*********************************************************************/
+		num_i = I_UDP;
+		num_j = J_UDP;
+
+		//1.通过对小结构体的遍历,来获得大结构体的数据
+		struct list_head *n1 = NULL;	
+		list_for_each_safe(p1, n1, &udp_data_head)			//安全遍历聊天
+		{
+			pos1 = list_entry(p1, struct servmsg_udp, servmsg_udp_list);		
+			//2.根据类型,处理数据
+	//		printf("类型:%d,data=%s\n", pos1->recvmsg.type_udp, pos1->recvmsg.data);
+			switch (pos1->recvmsg.type_udp)
+			{
+				case LOG_IN:	//登入
+				{
+					//登入信息不需要处理,直接用--list命令可查看的登入者信息
+					break;
+				}				
+				case OFFLINE:	//下线
+				{
+					//有用户下线,则直接删除登入者的链表信息
+					break;
+				}
+				case REFRESH:	//列表
+				{	
+					//在接收线程,修改类型,通过私聊发送出
+					break;
+				}
+				case UPLOAD:	//上传
+				{
+					//在接收线程处理了
+					break;
+				}
+				case DOWNLOAD:	//下载
+				{	
+					//在接收线程处理了
+					break;
+				}
+				case CHAT_ONE:	//私聊
+				{
+					/*提取聊天包,打印*/
+					if(strncmp(pos1->recvmsg.aim_name, MY_NAME, strlen(MY_NAME)) == 0)
+					{										
+						char addr[16];
+						u_short port;							
+						inet_ntop(AF_INET, (void *)&(pos1->recvmsg.self_addr_udp.sin_addr.s_addr), addr, sizeof(addr));
+						port = ntohs(pos1->recvmsg.self_addr_udp.sin_port);	
+						
+						pr_debug("发送者:%s,接收者:%s\n", pos1->recvmsg.self_name, pos1->recvmsg.aim_name);									
+						pr_debug("发送客户地址:%s:%d\n", addr, port);
+						pr_debug("内容[%d字节]:%s \n", pos1->recvmsg.data_size, pos1->recvmsg.data);					
+												
+						if (strncmp(pos1->recvmsg.data, "quit", 4) == 0)
+						{
+							pr_debug("[%s]结束与[%s]的聊天!\n", pos1->recvmsg.self_name, pos1->recvmsg.aim_name);							
+						}
+
+						I_UDP--;						
+						list_del(&pos1->servmsg_udp_list);	//处理完后删除聊天
+						free(pos1);
+
+					}	
+					
+					break;
+				}				
+				case CHAT_ALL:	//群聊
+				{	
+					/*提取聊天包,发送给目标*/
+					struct list_head *n2 = NULL;
+					list_for_each_safe(p2, n2, &udp_online_head)		//重新遍历上线
+					{
+						pos2 = list_entry(p2, struct user_info, user_info_list);
+						if (strncmp(pos1->recvmsg.aim_name, pos2->user_name, strlen(pos2->user_name)) == 0)		
+						{//在用户列表中,找到了
+							continue;
+						}
+						pr_debug("发送者:%s,接收者:%s\n", pos1->recvmsg.self_name, pos1->recvmsg.aim_name);			
+							
+						char addr[16];
+						u_short port;							
+						inet_ntop(AF_INET, (void *)&(pos2->cli_addr_udp.sin_addr.s_addr), addr, sizeof(addr));
+						port = ntohs(pos2->cli_addr_udp.sin_port);				
+						pr_debug("发送客户地址:%s:%d\n", addr, port);
+								
+						/*截取聊天信息*/
+						pos1->recvmsg.data[UDP_MAXSIZE] = 0;						
+						printf("内容[%d字节]:%s \n", pos1->recvmsg.data_size, pos1->recvmsg.data);					
+						
+						if (strncmp(pos1->recvmsg.data, "quit", 4) == 0)
+							{
+								pr_debug("[%s]结束群聊!\n", pos1->recvmsg.self_name);
+							}
+						else
+							{
+								port = ntohs(pos2->cli_addr_udp.sin_port);				
+								udp_send_to(inet_ntoa(pos2->cli_addr_udp.sin_addr),port, \
+									&pos1->recvmsg, sizeof(pos1->recvmsg));
+							}					
+						
+					}
+					I_UDP--;
+					list_del(&pos1->servmsg_udp_list);	//处理完后删除聊天
+					free(pos1);	
+					
+					break;				
+				}				
+				default:
+					break;	
+			}
+		}
+
+	}		
+		
+	return NULL;
+}
+
+/*UDP接收数据*/
+
+void *recv_udp(void *arg)
+{
+	sleep(1);
+	pr_debug("UDP接收数据\n");
+	
+	struct sockaddr_in cin;	//发送者信息
+	char ret;
+
+	/*3.接收数据包*/
+	struct msg_udp msg;	//收到他人发来的包
+	while (1)
+	{  
+		ret = udp_recv_from(SELF_IP, SELF_PORT_UDP, &cin, &msg);
+		if (ret < 0) //真正出错了
+		{
+			perror("recvfrom");
+			continue;
+		}
+		else
+		{
+			//加入链表
+			udp_linked_list_add(&msg);
+		}
+	}
+
+	return NULL;
+}
+
+
+/*UDP广播接收数据*/
+void *recv_broad_udp(void *arg)
+{
+	sleep(1);
+	pr_debug("UDP广播接收数据\n");
+	
+	struct sockaddr_in cin;	//发送者信息
+	char ret;
+
+	/*3.接收数据包*/
+	struct msg_udp msg;	//收到他人发来的包
+	while (1)
+	{  
+		ret = udp_broad_recv_from(BROADCAST_RECV_IP, BROADCAST_RECV_PORT_UDP, &cin, &msg);
+		if (ret < 0) //真正出错了
+		{
+			perror("recvfrom");
+			continue;
+		}
+		else
+		{
+			//加入链表
+			pr_debug("UDP广播接收数据类型:%d\n", msg.type_udp);
+			udp_linked_list_add(&msg);
+		}
+		
+
+	}
+
+	return NULL;
+}
+/******************************************以上UDP部分******************************************************/
+
+/******************************************各功能模块*******************************************************/
+
+/*私聊*/
+void talk(char *name, char *str)
+{
+	if(!name && !str)
+		pr_debug("私聊\n");
+	
+	int ret;
+	static char aim_name[20];
+	/*获取对方名字*/	
+	struct msg_udp msg_data;
+	
+	
+	if(!name)
+	{
+		pthread_mutex_lock(&lock1);
+		printf("对方名字:");
+		ret = scanf("%s", aim_name);	//对方名字
+		pthread_mutex_unlock(&lock1);
+		//加入临时聊天对象
+		aim_name[19] = '\0';
+		bzero(&OTHER_UDP_ADDR, sizeof(struct sockaddr_in));
+		struct sockaddr_in *return_udp_addr = name_reurn_addr(1, aim_name);
+		if(return_udp_addr)
+			memcpy(&OTHER_UDP_ADDR, return_udp_addr, sizeof(struct sockaddr_in));
+	}
+	else
+		strcpy(aim_name, name);
+
+	printf("现对话为:%s\n", aim_name);
+	/*2.发送数据包*/	
+	char buf[UDP_MAXSIZE+1];
+	bzero(buf, UDP_MAXSIZE+1);
+	if(!str)
+	{
+		pthread_mutex_lock(&lock1);
+		printf("请输入内容:\n");
+		ret = scanf("%s", buf);
+		pthread_mutex_unlock(&lock1);
+//		char *s;
+//		fflush(stdin);
+//		s = fgets(buf, UDP_MAXSIZE, stdin);	
+		//printf("用户[%s]输入:\n", MY_NAME);	
+	}
+	else{
+		strcpy(buf, str);}
+	buf[UDP_MAXSIZE] = 0;
+	
+	if (strlen(aim_name) > 0 && strlen(buf) > 0)
+	{
+		struct sockaddr_in *aim_udp_addr;
+		aim_udp_addr = name_reurn_addr(1, aim_name);
+
+		if (aim_udp_addr)	//找到此用户,则发送;否则加入链表
+		{				
+			//填写数据包信息
+			msg_data.type_udp = CHAT_ONE;				//聊天类型	
+			strcpy(msg_data.self_name, MY_NAME);		//自己名字
+			strcpy(msg_data.aim_name, aim_name);		//目标名字
+			msg_data.data_size = strlen(buf);			//数据大小
+			buf[msg_data.data_size-1] = 0;
+			memcpy(msg_data.data, buf, msg_data.data_size);		//数据
+			memcpy(&msg_data.self_addr_udp, &SELF_UDP_ADDR, sizeof(SELF_UDP_ADDR));		//自己地址
+			memcpy(&msg_data.aim_addr_udp, &pos2->cli_addr_udp, sizeof(pos2->cli_addr_udp));//目标地址
+			
+			udp_addr_send_to(aim_udp_addr, &msg_data, sizeof(msg_data));
+		}						
+	}
+
+	if (strncmp(buf, "quit", 4) == 0)
+	{
+		msg_data.type_udp = NO_HANDLE;		//不处理类型	
+		play();
+	}
+	
+}
+
+/*群聊*/
+void toall(void)
+{
+	pr_debug("群聊\n");	
+
+	char *s;
+	struct msg_udp msg_data;
+	/*2.发送数据包*/	
+	char buf[UDP_MAXSIZE+1];
+	bzero(buf, UDP_MAXSIZE+1);
+	fflush(stdin);
+	s = fgets(buf, UDP_MAXSIZE, stdin);	
+	//printf("用户[%s]输入:\n", MY_NAME);	
+	buf[UDP_MAXSIZE] = 0;	
+	if (strlen(buf) >= 0)
+	{
+		struct list_head *n2 = NULL;
+		list_for_each_safe(p2, n2, &udp_online_head)		//安全遍历上线
+		{
+			pos2 = list_entry(p2, struct user_info, user_info_list);
+		
+			char ip[16];
+			u_short port;
+							
+			inet_ntop(AF_INET, (void *)&(pos2->cli_addr_udp.sin_addr.s_addr), ip, sizeof(ip));
+			port = ntohs(pos2->cli_addr_udp.sin_port);				
+			
+			//填写数据包信息
+			msg_data.type_udp = CHAT_ALL;				//聊天类型	
+			strcpy(msg_data.self_name, MY_NAME);		//自己名字
+			strcpy(msg_data.aim_name, pos2->user_name);	//目标名字
+			msg_data.data_size = strlen(buf);			//数据大小
+			buf[msg_data.data_size-1] = 0;
+			memcpy(msg_data.data, buf, msg_data.data_size);		//数据
+			memcpy(&msg_data.self_addr_udp, &SELF_UDP_ADDR, sizeof(SELF_UDP_ADDR));	//自己地址
+			memcpy(&msg_data.aim_addr_udp, &pos2->cli_addr_udp, sizeof(pos2->cli_addr_udp));//目标地址
+
+			udp_send_to(ip, port, &msg_data, sizeof(msg_data));
+
+		}
+	}
+	if (strncmp(buf, "quit", 4) == 0)
+	{
+		msg_data.type_udp = NO_HANDLE;		//不处理类型	
+		play();
+	}
+	
+}
+
+/*下线*/
+void lgout(void)
+{
+	int ret =-1;
+	/*填写数据包信息*/	
+	struct msg_udp msg_data;
+	msg_data.type_udp = OFFLINE;				//退出类型	
+	strcpy(msg_data.self_name, MY_NAME);		//自己名字	
+	
+	/*发送*/
+	ret = udp_broad_send_to(BROADCAST_SEND_IP, BROADCAST_SEND_PORT_UDP, &msg_data, sizeof(msg_data));	//广播
+	IF_DOWN = 0;
+	
+	if (ret != -1)
+	{
+		printf("下线成功!\n");
+	}
+
+}
+
+/*列表*/
+void list(void)
+{
+	pr_debug("列表\n");	
+	
+	struct servmsg_udp newmsg;					
+	struct list_head *n2 = NULL;
+
+	bzero(&newmsg.recvmsg.data,	UDP_MAXSIZE+1);
+	list_for_each_safe(p2, n2, &udp_online_head)		//安全遍历上线
+	{						
+		pos2 = list_entry(p2, struct user_info, user_info_list);
+		
+		if(strlen((char *)&newmsg.recvmsg.data) == 0)
+		{
+			sprintf(newmsg.recvmsg.data, "%s", pos2->user_name);	
+		}
+		else
+		{
+			sprintf(newmsg.recvmsg.data, "%s %s", newmsg.recvmsg.data, pos2->user_name);	
+		}
+	}
+	sprintf(newmsg.recvmsg.data, "%s%c", newmsg.recvmsg.data, '\n');
+	printf("用户列表:%s\n", newmsg.recvmsg.data);
+
+}
+
+/*=====================================以下TCP部分=====================================*/
+void *tcp_linked_list_manage(void *arg)
+{
+	sleep(2);
+	pr_debug("TCP链表管理\n");
+	int file_wrfd;
+	static int num_i=0, num_j=0;
+	static int sequence_i = 0;	//数据顺序
+	size_t alto=0;
+	while (1)
+	{
+		if(num_j != J_TCP)
+			printf("** 下载:%d **\n", J_TCP);
+		num_i = I_TCP;
+		num_j = J_TCP;
+		//1.通过对小结构体的遍历,来获得大结构体的数据
+		struct list_head *n3 = NULL;	
+		
+		list_for_each_safe(p3, n3, &tcp_data_head)			//安全遍历聊天
+		{			
+			pos3 = list_entry(p3, struct servmsg_tcp, servmsg_tcp_list);
+			
+			char pr_data1[20];
+			memcpy(pr_data1, pos3->recvmsg.data,19);
+			printf("link->type:%d,data:%s\n",pos3->recvmsg.type_tcp, pr_data1);
+			//2.根据类型,处理数据
+	//		printf("类型:%d,data=%s\n", pos1->recvmsg.type_udp, pos1->recvmsg.data);
+			switch (pos3->recvmsg.type_tcp)
+			{
+				case DOWN_IF:	//是否下载
+				{
+					printf("用户[%s]发来文件[%s],是否接收?(==y,==n)\n", addr_return_name(&pos3->recvmsg.self_addr_tcp), pos3->recvmsg.data);
+					char reply;
+					
+					while(DOWN_IF_IN != 1)
+					{
+						printf("等待输入...\n");
+						sleep(1);						
+					}					
+					reply = DATAIN[0];
+					DOWN_IF_IN = 0;
+					if (reply == 'y')
+					{		
+						printf("同意接受文件[%s]\n", pos3->recvmsg.data);
+						
+						//填写资料
+						struct msg_tcp msg;
+						char *aim_name = addr_return_name(&pos3->recvmsg.self_addr_tcp);
+						if(aim_name)
+						{
+							msg.type_tcp = DOWN_YES;			//类型  
+							/*				|	|				*/
+							/*		让对方,进入下个选项		*/
+							strcpy(msg.self_name, MY_NAME);		//自己的名字
+							strcpy(msg.aim_name, aim_name);		//目标名字
+							msg.data_size = strlen("*no*");		//数据大小0 ~ 65535
+							strcpy(msg.data, "*no*");			//数据
+							msg.data[TCP_MAXSIZE] = 0;
+							memcpy(&msg.self_addr_tcp, &SELF_TCP_ADDR, sizeof(struct sockaddr_in));	//自己tcp地址
+							memcpy(&msg.aim_addr_tcp, &pos3->recvmsg.self_addr_tcp, sizeof(struct sockaddr_in));		//目标地址
+
+							if(tcp_addr_send_to(&pos3->recvmsg.self_addr_tcp, &msg, sizeof(msg)))//发送TCP上传信息,文件名
+							{		
+								printf("DOWN_YES发送成功!\n");
+							}
+							else
+							{
+								printf("DOWN_YES发送失败!\n");
+								break;
+							}						
+						}
+						else
+							printf("确认下载,填写资料有错\n");
+							
+						I_TCP--;
+						list_del(&pos3->servmsg_tcp_list);	//处理完后删除询问
+						free(pos3);		
+					}
+
+					break;
+				}
+				/*====================================================*
+				1.对方收到DOWN_YES, 发送DOWN_START, [等待...]
+				2.自己收到DOWN_START, 建立文件, 发送DOWN_READY
+				3.对方收到DOWN_READY, 发送DOWN_LOADING, [继续...]
+				4.直到发送完
+				*====================================================*/								
+				case DOWN_YES:		//对方收到确认,上传过来
+				{
+					//读取文件,并发送
+					printf("收到确认,准备发送!\n");	
+					struct sockaddr_in *cin = &pos3->recvmsg.self_addr_tcp;
+					char *way = UP_WAY;
+					struct msg_tcp msg;
+					char *aim_name = addr_return_name(cin);
+					if(aim_name)
+					{
+						msg.type_tcp = DOWN_START;			//类型
+						strcpy(msg.self_name, MY_NAME);		//自己的名字
+						strcpy(msg.aim_name, aim_name);		//目标名字
+						memcpy(&msg.self_addr_tcp, &SELF_TCP_ADDR, sizeof(struct sockaddr_in));	//自己tcp地址
+						memcpy(&msg.aim_addr_tcp, cin, sizeof(struct sockaddr_in));		//目标地址
+
+						char *cut_p = NULL, *cut_q = NULL;
+						char copy_way[UDP_MAXSIZE+1];	
+						strcpy(copy_way, way);	
+						copy_way[UDP_MAXSIZE] = 0;		
+						cut_p = strtok(copy_way, "/");
+						while(cut_p){
+							cut_q = cut_p;
+							cut_p = strtok(NULL, "/");
+							if(!cut_p)
+								break;
+						}
+						msg.data_size = strlen(cut_q);				//数据大小0 ~ 65535		
+						bzero(msg.data, TCP_MAXSIZE+1);
+						strcpy(msg.data, cut_q);					//数据
+						msg.data[TCP_MAXSIZE] = 0;
+						printf("%s,%s\n", cut_q,way);
+						
+						tcp_info_check(cin);
+						if(tcp_addr_send_to(cin, &msg, sizeof(msg)))
+						{		
+							printf("DOWN_START发送成功!\n");
+						}
+						else
+						{
+							printf("DOWN_START发送失败!\n");
+							break;
+						}
+					}
+					else
+					{
+						printf("read_file->aim_name 错误!\n");
+						break;
+					}						
+
+					I_TCP--;
+					list_del(&pos3->servmsg_tcp_list);	//处理完后删除确认
+					free(pos3);							
+					
+					break;
+				}
+				case DOWN_NO:		//拒绝下载
+				{	
+
+					break;
+				}
+				case DOWN_START:	//下载开始
+				{							
+					/************************开始创建文件*****************************************************************************************/
+
+					char *file_name = pos3->recvmsg.data;
+					
+					printf("[%s]下载开始!\n", file_name);
+					
+					file_wrfd = open(file_name, O_RDWR | O_CREAT | O_APPEND, 0666);
+					
+					struct down_info *newinfo;
+					newinfo = (struct down_info *)malloc(sizeof(struct down_info));
+					//1.添加信息
+					strcpy(newinfo->user_name, pos3->recvmsg.self_name);						//用户名字
+					newinfo->file_wrfd = file_wrfd;	     										//文件fd		
+					memcpy(&newinfo->cli_addr_tcp, &pos3->recvmsg.self_addr_tcp, sizeof(struct sockaddr_in));								//客户端tcp地址					
+					
+					//2.加入链表
+					list_add_tail(&newinfo->down_info_list, &tcp_accept_head);
+					J_TCP++;
+
+					//3.收到DOWN_START,发送准备好了
+					struct msg_tcp msg;
+					char *aim_name = addr_return_name(&pos3->recvmsg.self_addr_tcp);
+					if(aim_name)
+					{
+						msg.type_tcp = DOWN_READY;			//类型  
+						/*				|	|				*/
+						/*		让对方,进入下个选项			*/
+						strcpy(msg.self_name, MY_NAME);		//自己的名字
+						strcpy(msg.aim_name, aim_name);		//目标名字
+						msg.data_size = strlen("*no*");		//数据大小0 ~ 65535
+						strcpy(msg.data, "*no*");			//数据
+						msg.data[TCP_MAXSIZE] = 0;
+						memcpy(&msg.self_addr_tcp, &SELF_TCP_ADDR, sizeof(struct sockaddr_in));	//自己tcp地址
+						memcpy(&msg.aim_addr_tcp, &pos3->recvmsg.self_addr_tcp, sizeof(struct sockaddr_in));		//目标地址
+						
+						if(tcp_addr_send_to(&pos3->recvmsg.self_addr_tcp, &msg, sizeof(msg)))//发送TCP上传信息,文件名
+						{		
+							printf("DOWN_READY发送成功!\n");
+						}
+						else
+						{
+							printf("DOWN_READY发送失败!\n");
+							break;
+						}						
+					}
+					else
+						printf("确认下载,填写资料有错\n");
+					
+					sequence_i = 0;					
+					I_TCP--;
+					list_del(&pos3->servmsg_tcp_list);	//处理完后删除开始下载
+					free(pos3);		
+					
+					break;
+				}
+				case DOWN_READY:	//继续DOWN_YES的read_file上传
+				{
+					printf("收到DOWN_READY\n");
+					DOWN_READY_IF = 1;
+					read_file(&pos3->recvmsg.self_addr_tcp, UP_WAY);
+				
+					I_TCP--;
+					list_del(&pos3->servmsg_tcp_list);	//处理完后删除开始下载
+					free(pos3);	
+					
+					break;
+				}
+				case DOWN_LOADING:	//正在下载
+				{
+					printf("正在下载!\n");
+					char pr_data[20];
+					memcpy(pr_data, pos3->recvmsg.data,19);
+					pr_debug("数据[%s]\n", pr_data);
+					printf("接受顺序:%d, 自定顺序:%d\n", pos3->recvmsg.data_sequence, sequence_i);
+
+					struct list_head *n4 = NULL;					
+					list_for_each_safe(p4, n4, &tcp_accept_head)			//安全遍历聊天
+					{
+						pos4 = list_entry(p4, struct down_info, down_info_list);
+						printf("user_name:%s,self_name:%s\n", pos4->user_name, pos3->recvmsg.self_name);
+						if (strncmp(pos4->user_name, pos3->recvmsg.self_name, strlen(pos3->recvmsg.self_name)) == 0)
+						{
+							printf("数据顺序:%d, 数据大小:%d\n", pos3->recvmsg.data_sequence, pos3->recvmsg.data_size);
+							int ret;
+							if(pos3->recvmsg.data_sequence == sequence_i)
+							{			
+								
+								ret = write(pos4->file_wrfd, &pos3->recvmsg.data, pos3->recvmsg.data_size);
+								sequence_i++;
+								alto += pos3->recvmsg.data_size;
+								
+								I_TCP--;						
+								list_del(&pos3->servmsg_tcp_list);	//处理完后删除正在下载
+								free(pos3);
+							}
+						}
+					}
+					break;
+				}
+				case DOWN_END:		//下载结束
+				{
+				
+	
+					printf("对方发送[%s]完成!\n", pos3->recvmsg.data);
+ 					printf("接收大小[%.2fk], 实际大小[%.2fk]\n", alto*1.0/1024, pos3->recvmsg.alto_size*1.0/1024);						
+					struct list_head *n4 = NULL;	
+					list_for_each_safe(p4, n4, &tcp_accept_head)			//安全遍历聊天
+					{
+						pos4 = list_entry(p4, struct down_info, down_info_list);
+						if (strncmp(pos4->user_name, pos3->recvmsg.self_name, strlen(pos3->recvmsg.self_name)) == 0)
+						{	
+							if(pos3->recvmsg.data_sequence == sequence_i)
+							{
+								printf("关闭文件[%d]\n", pos4->file_wrfd);
+								close(pos4->file_wrfd);
+								sequence_i = 0;
+								alto = 0;
+								
+								I_TCP--;
+								free(pos3);
+								list_del(&pos3->servmsg_tcp_list);	//处理完后删除下载结束
+									
+								
+								J_TCP--;							
+								list_del(&pos4->down_info_list);	//删除用户
+								free(pos4);
+							}
+						}
+					}
+
+					break;
+				}
+				case UP_YES:		//确认上传
+				{
+					/*
+					struct sockaddr_in cin;
+					char buf[TCP_MAXSIZE+1];
+					tcp_addr_recv_from(&SELF_TCP_ADDR, &cin, buf);
+					buf[TCP_MAXSIZE] = 0;
+					char *name=addr_return_name(&cin);
+					if(strncmp(buf, "ifdown|yes", strlen("ifdown|yes")))//ifdown|yes
+						printf("对方[%s],同意接收,请输入2,再回车", name);
+					else
+						printf("对方[%s],拒绝接收,返回请 --quit,继续请重新选择", name);
+					*/
+					break;
+				}
+				case UP_NO:			//拒绝上传
+				{	
+
+					break;
+				}
+				
+				default:
+					break;					
+			}
+		}
+	}
+
+	return NULL;
+}
+
+/*TCP接收数据*/
+void *recv_tcp(void *arg)
+{
+	sleep(1);
+	pr_debug("TCP接收数据\n");
+	/*5.接收数据包*/
+	int ret = -1 ;
+	struct sockaddr_in cin;	//发送者信息
+	struct msg_tcp msg;	//收到他人发来的包
+	
+	int tcp_addr_fd = tcp_addr_ini(&SELF_TCP_ADDR);
+	while (1)
+	{
+		bzero(&msg, sizeof(msg));
+		if(tcp_addr_fd)
+		{
+			ret = tcp_addr_recv_from(tcp_addr_fd, &cin, &msg);
+
+			printf("while体中recv\n");
+			tcp_info_check(&cin);
+
+			if (ret < 0) //真正出错了
+			{
+				perror("tcp_addr_recv_from");
+				continue;
+			}
+			else if(ret >0)
+			{
+				printf("recv->type:%d\n",msg.type_tcp);
+				struct servmsg_tcp *newmsg;
+				newmsg = (struct servmsg_tcp *)malloc(sizeof(struct servmsg_tcp));
+				//1.添加尾部
+				memcpy(&(newmsg->recvmsg), &msg, sizeof(msg));	//数据	
+		
+				//2.加入链表
+				list_add_tail(&newmsg->servmsg_tcp_list, &tcp_data_head);
+				I_TCP++;
+			
+			}
+		}
+	}
+
+
+	return NULL;
+}
+
+/*上传文件*/
+char read_file(struct sockaddr_in *cin, char *way)
+{
+	int file_rdfd;
+	char buf[TCP_MAXSIZE+1];
+	int sequence_i = 0;
+	struct msg_tcp msg;	
+	size_t size, alto, real_num=0;
+		
+	while(!DOWN_READY_IF)
+	{
+		sleep(1);
+		printf("等待DOWN_READY回复\n");
+	}
+	DOWN_READY_IF = 0;
+	
+	file_rdfd = open(way, O_RDONLY, 0644);
+	alto = size = lseek(file_rdfd, 0L, SEEK_END) - lseek(file_rdfd, 0L, SEEK_SET);
+	if (alto == 0)
+	{
+		pr_debug("空文件!\n");
+	}	
+	while (size >= TCP_MAXSIZE)							//文件大于5k,则每8k上传
+	{
+		bzero(buf, TCP_MAXSIZE+1);
+		lseek(file_rdfd, 0L, real_num);
+		if (read(file_rdfd, buf, TCP_MAXSIZE) > 0)
+		{
+			msg.type_tcp = DOWN_LOADING;		//类型
+			strcpy(msg.self_name, MY_NAME);		//自己的名字
+			char *aim_name = addr_return_name(cin);
+			if(aim_name)
+				strcpy(msg.aim_name, aim_name);		//目标名字
+			msg.data_size = TCP_MAXSIZE;		//数据大小0 ~ 65535
+			msg.data_sequence = sequence_i;
+			bzero(msg.data, TCP_MAXSIZE+1);
+			memcpy(msg.data, buf, TCP_MAXSIZE);		//数据
+			msg.data[TCP_MAXSIZE] = 0;
+			if (tcp_addr_send_to(cin, &msg, sizeof(msg)))	
+			{
+				sequence_i++;
+				real_num += TCP_MAXSIZE;
+				size -= TCP_MAXSIZE;			
+				printf("上传 >5k %.2f%%\n", real_num*100.0/alto);
+			}
+		}
+		else
+		{
+			printf("读取文件失败1\n");
+		}
+
+	}
+	while (size < TCP_MAXSIZE && size  > 0)								//小于5k,则按size大小上传
+	{
+		bzero(buf, TCP_MAXSIZE+1);
+		lseek(file_rdfd, 0L, real_num);
+		if (read(file_rdfd, buf, size) != -1)
+		{
+			msg.type_tcp = DOWN_LOADING;		//类型
+			strcpy(msg.self_name, MY_NAME);		//自己的名字
+			char *aim_name = addr_return_name(cin);
+			if(aim_name)
+				strcpy(msg.aim_name, aim_name);		//目标名字
+			msg.data_size = size;				//数据大小0 ~ 65535
+			msg.data_sequence = sequence_i;	
+			bzero(msg.data, TCP_MAXSIZE+1);
+			memcpy(msg.data, buf, size);		//数据
+			msg.data[TCP_MAXSIZE] = 0;
+			if (tcp_addr_send_to(cin, &msg, sizeof(msg)))
+			{
+				sequence_i++;
+				real_num = real_num + size;
+				size = size - size;			
+				printf("上传 <5k %.2f%%\n", real_num*100.0/alto);
+				break;
+			}			
+		}
+		else
+		{
+			printf("读取文件失败2\n");
+		}
+	}
+	msg.type_tcp = DOWN_END;			//类型
+	strcpy(msg.self_name, MY_NAME);		//自己的名字
+	char *aim_name = addr_return_name(cin);
+	if(aim_name)
+		strcpy(msg.aim_name, aim_name);		//目标名字
+	msg.data_size = strlen("upend");			//数据大小0 ~ 65535
+	msg.data_sequence = sequence_i;
+	msg.alto_size = alto;
+	bzero(msg.data, TCP_MAXSIZE+1);
+	strcpy(msg.data, "upend");					//数据
+	msg.data[TCP_MAXSIZE] = 0;
+	if (tcp_addr_send_to(cin, &msg, sizeof(msg)))	//上传完成	
+	{
+		printf("上传完成!\n发送大小[%.2fk], 实际大小[%.2fk]\n", alto*1.0/1024, real_num*1.0/1024);
+	}
+	else
+		printf("上传失败!\n");
+	
+	close(file_rdfd);
+	return 0;
+}
+
+/*上传*/
+void up(void)
+{
+	int ret = -1;
+	ret = system("clear");
+	printf("this is UPLOAD\n");	
+	printf("=============上传帮助=============\n");	
+	printf("== 1.默认本目录+【文件名】      ==\n");
+	printf("== 2.【完整文件路径】           ==\n");
+	printf("== 3.查看上传文件列表           ==\n");
+	printf("== 4.退出                       ==\n");
+	printf("==================================\n");
+	
+	up_ord();
+}
+
+void up_ord(void)
+{
+	int ret = -1;
+	char *s;
+	char ord[10];
+	pthread_mutex_lock(&lock1);
+	printf("选择命令:");
+	ret = scanf("%s", ord);
+	pthread_mutex_unlock(&lock1);
+	if (strncmp(ord, "clear", 5) == 0)
+	{
+		up();
+	}
+	else if (!((strlen(ord) == 1) && (ord[0] == '1' || '2' || '3' || '4')))
+	{
+		printf("输入选项错误,进入命令界面!\n");
+		play();
+	}
+	else
+	{
+		switch (atoi(ord))
+		{
+			char file_name[20];
+			char aim_name[20];
+			static struct sockaddr_in *aim_addr_udp = NULL;
+			case 1:
+			{
+				pr_debug("进入选项1\n");
+				s = getcwd(UP_WAY, sizeof(UP_WAY)); 
+				pthread_mutex_lock(&lock1);
+				printf("当前目录下,请输入文件名:\n");
+				ret = scanf("%s", file_name);
+				pthread_mutex_unlock(&lock1);
+				sprintf(UP_WAY,"%s/%s", UP_WAY, file_name);
+				if (access(UP_WAY, F_OK | R_OK) == 0)
+				{	
+					pr_debug("[%s]存在!\n", file_name);
+					pthread_mutex_lock(&lock1);
+					printf("接收者名字:\n");
+					ret = scanf("%s", aim_name);	
+					pthread_mutex_unlock(&lock1);
+					
+					struct sockaddr_in *aim_addr_tcp = name_reurn_addr(2, aim_name);
+
+					//填写资料
+					struct msg_tcp msg;
+					if(aim_addr_tcp)
+					{
+						msg.type_tcp = DOWN_IF;				//类型
+						strcpy(msg.self_name, MY_NAME);		//自己的名字
+						strcpy(msg.aim_name, aim_name);		//目标名字
+						msg.data_size = strlen(file_name);	//数据大小0 ~ 65535
+						strcpy(msg.data, file_name);		//数据
+						msg.data[TCP_MAXSIZE] = 0;
+						memcpy(&msg.self_addr_tcp, &SELF_TCP_ADDR, sizeof(struct sockaddr_in));	//自己tcp地址
+						memcpy(&msg.aim_addr_tcp, aim_addr_tcp, sizeof(struct sockaddr_in));		//目标地址
+
+						tcp_addr_send_to(aim_addr_tcp, &msg, sizeof(msg));//发送TCP上传信息,文件名
+						printf("上传请求成功!\n");
+					}
+					else
+						printf("上传,填写资料有错\n");
+
+				}
+				break;
+			}
+			case 2:
+			{
+				pr_debug("进入选项2\n");
+				s = fgets(UP_WAY, sizeof(UP_WAY), stdin);
+				if (access(UP_WAY, F_OK | R_OK) == 0)
+				{	
+					char *cut_p;
+					cut_p = strtok(UP_WAY, "/");
+					while (cut_p)
+					{
+						cut_p = strtok(NULL, "/");
+					}
+					pr_debug("[%s]存在!\n", cut_p);
+					char file_info[30];
+					sprintf(file_info, "if_down%s", cut_p);
+					tcp_send_to(OTHER_IP, OTHER_PORT_TCP, file_info, sizeof(file_info));//发送TCP上传信息,文件名
+					
+					/*填写数据包信息*/	
+					struct msg_udp msg_data;
+					msg_data.type_udp = UPLOAD;					//聊天类型	
+					strcpy(msg_data.self_name, MY_NAME);		//自己名字
+					sprintf(msg_data.data, "upstart_%s", cut_p); 	//发送UDP上传信息,文件名
+					udp_send_to(OTHER_IP, OTHER_PORT_TCP, &msg_data, sizeof(msg_data));//发送UDP上传信息,文件名
+					if(aim_addr_udp)
+						read_file(aim_addr_udp, UP_WAY);
+				}
+
+				break;
+			}
+			case 3:
+			{
+				pr_debug("进入选项3\n");
+				//发送下载列表信息
+				break;
+			}
+			case 4:
+			{
+				pr_debug("进入选项4\n");
+				play();
+				break;
+			}
+
+		}
+	}
+
+}
+
+/*下载*/
+void down(void)
+{
+	int ret = -1;
+	char *s;
+	ret = system("clear");
+	printf("this is DOWNLOAD\n");	
+	printf("==============下载帮助==============\n");	
+	printf("==  1.默认本目录,为下载路径      ==\n");
+	printf("==  2.输入下载文件路径            ==\n");
+	printf("==  3.查看下载文件列表            ==\n");
+	printf("==  4.开始下载                    ==\n");
+	printf("==  5.退出                        ==\n");
+	printf("====================================\n");
+	
+	char ord[10];
+	pthread_mutex_lock(&lock1);
+	printf("命令:");
+	ret = scanf("%s", ord);
+	pthread_mutex_unlock(&lock1);
+	if (!((strlen(ord) == 1) && (ord[0] == '1' || '2' || '3' || '4')))
+	{
+		printf("输入选项错误,进入命令界面!\n");
+		play();
+	}
+	switch (atoi(ord))
+	{
+		case 1:
+		{
+			pr_debug("进入选项1\n");
+			s = getcwd(DOWN_WAY, sizeof(DOWN_WAY)); 
+			break;
+		}
+		case 2:
+		{
+			pr_debug("进入选项2\n");
+			s = fgets(DOWN_WAY, sizeof(DOWN_WAY), stdin);
+			if (access(DOWN_WAY, F_OK | R_OK) == 0)
+			{
+				pr_debug("目录存在,可以下载!\n");
+			}
+			else
+			{
+				char ord[50] = "mkdir -p ";
+				sprintf(ord, "%s%s", ord, DOWN_WAY);
+				ret = system(DOWN_WAY);
+				pr_debug("目录不存在,创建成功,可以下载!\n");
+			}
+
+			break;
+		}
+		case 3:
+		{
+			pr_debug("进入选项3\n");
+			//发送下载列表信息
+			
+			/*TCP地址信息*/
+			struct msg_udp usron;
+			usron.type_udp = DOWNLOAD;					//上线类型	
+			strcpy(usron.self_name, MY_NAME);			//自己名字
+			strcpy(usron.data, "list");					//list标识
+			usron.aim_addr_udp.sin_family = AF_INET;		//他人地址
+			usron.aim_addr_udp.sin_port = htons(OTHER_PORT_UDP); //UDP接收列表
+			usron.aim_addr_udp.sin_addr.s_addr = inet_addr(OTHER_IP);
+			bzero(usron.aim_addr_udp.sin_zero, 8);	
+
+			udp_send_to(OTHER_IP, OTHER_PORT_TCP, &usron, sizeof(usron));//发送UDP上传信息,文件名
+
+			break;
+		}
+		case 4:
+		{
+			pr_debug("进入选项4\n");
+			//发送下载列表信息
+			/*TCP地址信息*/
+			struct msg_udp usron;
+			usron.type_udp = DOWNLOAD;					//上线类型	
+			strcpy(usron.self_name, MY_NAME);		//自己名字
+			char file_name[30];
+			printf("请输入文件名:");
+			ret = scanf("%s", file_name);
+			sprintf(usron.data, "start:%s", file_name);//start标识
+			usron.aim_addr_udp.sin_family = AF_INET;		//他人地址
+			usron.aim_addr_udp.sin_port = htons(OTHER_PORT_TCP);	//TCP接收文件
+			usron.aim_addr_udp.sin_addr.s_addr = inet_addr(OTHER_IP);
+			bzero(usron.aim_addr_udp.sin_zero, 8);	
+
+			udp_send_to(OTHER_IP, OTHER_PORT_TCP, &usron, sizeof(usron));//发送UDP上传信息,文件名
+			
+			break;
+		}
+		case 5:
+		{
+			pr_debug("进入选项4\n");
+			play();
+			break;
+		}
+
+	}
+
+}
+
+struct sockaddr_in *name_reurn_addr(int type, char *aim_name)
+{
+	int finded_name = NO_FIND;
+	struct list_head *n2 = NULL;
+	list_for_each_safe(p2, n2, &udp_online_head)		//安全遍历上线
+	{
+		pos2 = list_entry(p2, struct user_info, user_info_list);
+		if (strncmp(aim_name, pos2->user_name, strlen(pos2->user_name)) == 0)		
+		{
+			finded_name = HAVE_FIND;
+			if(type == 1)
+				return &pos2->cli_addr_udp;
+			else if(type == 2)
+				return &pos2->cli_addr_tcp;
+			else 
+				return NULL;
+		}
+	}
+	if (finded_name != HAVE_FIND)	//找到此用户,则发送;否则加入链表
+	{
+		printf("未找到[%s]此用户\n", aim_name);
+		return NULL;
+	}
+	
+	return NULL;
+}
+
+char *addr_return_name(struct sockaddr_in *addr)
+{
+	int finded_name = NO_FIND;
+	struct list_head *n2 = NULL;
+	list_for_each_safe(p2, n2, &udp_online_head)		//安全遍历上线
+	{
+		pos2 = list_entry(p2, struct user_info, user_info_list);
+		if (memcmp(&pos2->cli_addr_tcp.sin_addr, &addr->sin_addr, sizeof(struct in_addr)) == 0)		
+		{
+			finded_name = HAVE_FIND;
+			return pos2->user_name;
+		}
+	}
+	if (finded_name != HAVE_FIND)	//找到此用户,则发送;否则加入链表
+	{
+		char ip[16];
+		u_short port;							
+		inet_ntop(AF_INET, (void *)&(addr->sin_addr.s_addr), ip, sizeof(ip));
+		port = ntohs(addr->sin_port);				
+		printf("未找到[%s:%d]此用户\n", ip, port);
+		return NULL;
+	}	
+	
+	return NULL;
+}
+
+/*=====================================以上TCP部分=====================================*/
+
+/*帮助*/
+void help(void)
+{
+	pr_debug("帮助\n");
+	
+	int ret =-1;
+	ret = system("clear");
+	printf("this is	Help\n");	
+	printf("=================帮助=================\n");	
+	printf("==  1.命令格式:“--” + “命令”       ==\n");
+	printf("==  2.聊天时,使用quit退出聊天      ==\n");
+	printf("==  3.使用clear回到,命令界面       ==\n");
+	printf("==  4.如果ctrl+c,则下线,程序结束  ==\n");
+	printf("==  5.输入quit,退出帮助界面        ==\n");
+	printf("======================================\n");
+}
+
+
+/*判断(命令)*/
+void judge(char *ord)
+{
+	if(!ord);
+	else if (strncmp(ord, "help", 4) == 0)
+	{
+		help();
+	}
+	else if (strncmp(ord, "clear", 5) == 0)
+	{
+		play();
+	}		
+	else if (strncmp(ord, "talk", 4) == 0)
+	{
+		talk(NULL, NULL);
+	}
+	else if (strncmp(ord, "down", 4) == 0)
+	{
+		down();
+	}
+	else if (strncmp(ord, "list", 4) == 0)
+	{
+		list();
+	}
+	else if (strncmp(ord, "lgout", 5) == 0)
+	{
+		lgout();
+	}
+	else if (strncmp(ord, "toall", 5) == 0)
+	{
+		toall();
+	}
+	else if (strncmp(ord, "up", 2) == 0)
+	{
+		up();
+	}
+	else
+	{
+		printf("没有这个命令!\n");
+	}
+	
+}
+
+/*显示*/
+void play(void)
+{
+	int ret = -1;
+	ret = system("clear");
+	printf("this is LAN chat\n");	
+	printf("=================命令===============\n");	
+	printf("==  --help   帮助  --lgout  下线  ==\n");
+	printf("==  --talk   私聊  --toall  群聊  ==\n");
+	printf("==  --down   下载  --up     上传  ==\n");
+	printf("==  --list   列表  --clear  清屏  ==\n");
+	printf("====================================\n");
+}
+
+/*命令 或 聊天*/
+void order_or_chat(char *ord)
+{
+	char ret;
+	char *cut_p;
+	char *aim_name;
+	char new_ord[UDP_MAXSIZE+1];
+	
+	while(IF_ORD_IN == 0);
+	if (!ord)				//为空,输入
+	{
+		bzero(new_ord, UDP_MAXSIZE+1);
+		pthread_mutex_lock(&lock1);
+		printf("请输入命令或消息:\n");
+		ret = scanf("%s", new_ord);
+		pthread_mutex_unlock(&lock1);
+		order_or_chat(new_ord);
+	}	
+	else if (strncmp(ord, "--", 2) == 0)		//不为空,直接去掉--
+	{		
+		cut_p = strtok(ord, "--");
+		if (cut_p)
+		{
+			judge(cut_p);
+		}
+	}
+	else if (strncmp(ord, "++", 2) == 0)		//不为空,直接去掉--
+	{		
+		cut_p = strtok(ord, "++");
+		if (cut_p && cut_p[0] == 'y')
+		{	
+			printf("cut_p:%s\n", cut_p);
+			strcpy(DATAIN, cut_p);			
+			CHANGE_AIM_IF_IN = 1;	
+		}
+	}	
+	else if (strncmp(ord, "==", 2) == 0)		//不为空,直接去掉--
+	{		
+		cut_p = strtok(ord, "==");
+		if (cut_p && cut_p[0] == 'y')
+		{	
+			printf("cut_p:%s\n", cut_p);
+			strcpy(DATAIN, cut_p);			
+			DOWN_IF_IN = 1;	
+		}
+	}
+	else
+	{
+		aim_name = addr_return_name(&OTHER_UDP_ADDR);
+		if(aim_name && ord)						//找到用户
+		{
+			talk(aim_name, ord);
+		}
+		else
+		{
+			send_online_info();
+		}
+	}
+
+	order_or_chat(NULL);
+}
+
+void nametrue(int argc,  char *argv[])
+{
+	if (argc >= 2)
+	{
+		memcpy(MY_NAME, argv[1], strlen(argv[1]));	//自己名字
+	}
+	else
+	{
+		strcpy(MY_NAME, "xx");
+		printf("please input your name!\n");
+	}
+}
+
+void func(int signo)
+{
+	lgout();
+	pr_debug("\n[%s]退出!\n", MY_NAME);
+	exit(1);
+}
+
+/*填写本机绑定IP、端口号*/
+char info_udp_tcp(void)
+{
+	SELF_UDP_ADDR.sin_family = AF_INET;		//自己UDP地址
+	SELF_UDP_ADDR.sin_port = htons(SELF_PORT_UDP);
+	SELF_UDP_ADDR.sin_addr.s_addr = inet_addr(SELF_IP);
+	bzero(SELF_UDP_ADDR.sin_zero, 8);	
+
+	SELF_TCP_ADDR.sin_family = AF_INET;		//自己TCP地址
+	SELF_TCP_ADDR.sin_port = htons(SELF_PORT_TCP);
+	SELF_TCP_ADDR.sin_addr.s_addr = inet_addr(SELF_IP);
+	bzero(SELF_TCP_ADDR.sin_zero, 8);	
+	return 0;
+}
+
+/*登入线程*/
+void *loading_thread(void *arg)
+{
+	play();								//显示界面
+	info_udp_tcp();						//tcp udp 信息IP端口绑定
+	loading_udp();						//上线
+	sleep(3);
+	order_or_chat(NULL);				//命令判断->进入各功能	
+	return NULL;
+}
+
+
+int main(int argc, char *argv[])
+{
+	nametrue(argc, argv);				//处理输入名字
+	pr_debug("昵称:%s\n", MY_NAME);	//测试名字
+	signal(SIGINT, func);				//注册Ctrl + C	
+
+	pthread_mutex_init(&lock1, NULL);	//初始化锁1
+	
+	pthread_t tid1;			//登入、命令处理
+	pthread_t tid2;			//UDP接收线程,聊天	
+	pthread_t tid3;			//UDP广播接收线程,上线	
+	pthread_t tid4;			//TCP接收线程,文件传送
+	pthread_t tid5;			//循环遍历,结构体处理,类型UDP
+	pthread_t tid6;			//循环遍历,结构体处理,类型TCP
+
+
+	pthread_create(&tid1, NULL, loading_thread, NULL);
+	pthread_create(&tid2, NULL, recv_udp, NULL);
+	pthread_create(&tid3, NULL, recv_broad_udp, NULL);
+	pthread_create(&tid4, NULL, recv_tcp, NULL);
+	pthread_create(&tid5, NULL, udp_linked_list_manage, NULL);
+	pthread_create(&tid6, NULL, tcp_linked_list_manage, NULL);
+
+	pthread_join(tid1, NULL);
+	pthread_join(tid2, NULL);
+	pthread_join(tid3, NULL);
+	pthread_join(tid4, NULL);
+	pthread_join(tid5, NULL);
+	pthread_join(tid6, NULL);
+	
+	return 0;
+}

BIN
33/3


+ 3029 - 0
33/q

@@ -0,0 +1,3029 @@
+1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过丑的,没见过这么丑的。乍一看挺丑,仔细一看更丑!
+16、长的很无辜,长的对不起人民对不起党。
+17、你长的拖慢网速,你长的太耗内存
+18、你光着身子追我两公里我回一次头都算我是**! 
+19、大哥,把你脸上的分辨率调低点好吗?
+20、你长的违章! 
+21、国际脸孔世界通用
+22、很惋惜的看着他说:“手术能整回来吗?“
+23、你的长相突破了人类的想象... 
+24、你长的很野兽派嘛!!
+25、你还没有进化完全,长的象人真的难为你了。
+26.我想看着你说话,可你为什么把脸埋在你的屁股里?...哦?对不起,我不知道那是你的脸,那你的屁股哪儿去了?
+27.我也不想打击你了。你去动物园看看有没有合适的工作适合你,你这样在街上乱跑很容易被警察射杀的。
+28、mmd,我从没见过长的这么有考古价值的.
+
+葵花宝典之~ 骂人也疯狂, 原来骂人也可以这么有学问.. 狠经典哦2011-02-24 20:27
+
+你从小缺钙,长大缺爱,姥姥不疼,舅舅不爱。左脸欠抽,右脸欠踹。驴见驴踢,猪见猪踩。天生就是属黄瓜的,欠拍!后天属核桃的,欠捶!终生属破摩托的,欠踹!找个媳妇属螺丝钉的,欠拧!你说你,爷爷我教你练刀,你练剑,你还上剑不练,练下贱!金剑不练,练银剑!给你剑仙你不当,赐你剑神你不做,非死皮赖脸哭着喊着要做剑人!真是的,何必呢?!因为所以,科学道理;不但而且,我是恁爹.冭 看你玉树临风,英俊潇洒,风流倜傥,人见人爱,花见花开,想必一定是人渣中的极品,禽兽中的禽兽.看看啊,你这小脸瘦得,都没个猪样啦!现在把你丢到厕所里,厕所都能吐了,把你扔进黑洞里,黑洞也能自我爆炸了!快过节了,送你一副对联:  上联:树不要皮,必死无疑  下联:人不要脸,天下无敌  横批:人之贱无敌  一巴掌把你打到墙上扣都扣不下来!!!  你长得挺有创意,活得挺有勇气,丑不是你的本意,是上帝在发脾气.你老说你男朋友长得帅,有钱,长得是有钱,长得跟前列线似的,尿尿都分叉了,赶快去治治吧!! 人贱一辈子 猪贱一刀子  活着浪费空气 死了浪费土地 在家浪费RMB  中国那么多兵器你不学,偏学剑;  上剑不学学下剑;  下剑招式那么多,你学醉剑;  剑铁剑你不学,去学银剑!  终于,你练成了武林绝学:醉银剑!  最后达到人剑合一的境界---剑人  .
+
+水至清则无鱼,
+人至贱则无敌。
+
+滚,给我马不停蹄的滚;
+滚,思想有多远就给我滚多远;
+滚,永远有多远就给我滚多远;
+
+老子的世界不允许你的出现,
+带着你的虚伪滚出我的防线,
+再牛B的萧邦也弹不出老子的悲伤;
+
+莫要装,
+莫要装,
+装B遭累劈,
+装纯被人轮,
+装刁叫狗咬;
+
+天做孽尤可恕,
+人做孽不可活;
+
+如果你是鲜花,
+那牛以后都不敢再拉屎了。
+
+虽然我心眼有点小,
+但不缺,
+虽然我脾气很好,
+但不是没有,
+你别TMD惹恼了我;
+
+猪和人唯一的区别就是:
+猪一直是猪,
+而人有时却不是人;
+花有百日红,
+我与你不同,
+因为我是人;
+
+上联:风声雨声读书声,我不出声,
+下联:家事国事天下事,关你屁事。
+横批:一边玩去.
+
+ 
+1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过1、长的惊险.....有创意啊
+2、你小时候被猪亲过吧? 
+3、你长的很爱国很敬业很有骨气
+4、长得真有创意,活得真有勇气!
+5、你长的真tm后现代
+6、你长的好象车祸现场
+7、你长的外形不准比例没打好
+8、你干嘛用屁股挡住脸啊!
+9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的一种就是你这样的
+10、你的长相很提神的说!! 
+11、你需要回炉重造
+2、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
+13、靠,你tmd长得太好认了。
+14、长的很科幻,长的很抽象! 
+15、见过

+ 44 - 0
Makefile

@@ -0,0 +1,44 @@
+all:	c 1 2 4
+
+1:
+	cp 2.c 3.c
+	cp 2.c 2_bak.c
+	sed -i "s/#if 1/#if 0/" 3.c
+	@sed -i "s/#define SELF_PORT_UDP 5002/#define SELF_PORT_UDP 5006/" 4.c
+	@sed -i "s/#define SELF_PORT_TCP 5003/#define SELF_PORT_TCP 5007/" 4.c
+	@sed -i "s/#define BROADCAST_SEND_PORT_UDP 5200/#define BROADCAST_SEND_PORT_UDP 5400/" 4.c
+	@sed -i "s/#define BROADCAST_RECV_PORT_UDP 5300/#define BROADCAST_RECV_PORT_UDP 5500/" 4.c
+
+	@sed -i "s/#if 1\n#define SELF_PORT_UDP 5002\n#define SELF_PORT_TCP 5003/#if 1\n#define SELF_PORT_UDP 5006\n#define SELF_PORT_TCP 5007/" 4.c
+
+
+2:
+	gcc -Wall -O -g -o 2 2.c -lpthread
+	gcc -Wall -O -g -o 33/3 3.c -lpthread
+
+3:
+	gcc -Wall -O -g -o clien clien.c -lpthread
+	gcc -Wall -O -g -o serv serv.c -lpthread
+	
+4:
+	./2 2
+
+5:
+	./3 3
+
+6:
+	./4 4
+
+
+$@:	
+	gcc -Wall -O -g -o $@ [email protected] -lpthread
+
+c:
+	rm -rf *.o *.ko .tmp_versions .*cmd *.symvers *.mod.c main clean 1 2 3 33/3 4 serv clien
+cl:
+	arm-linux-gnu-gcc -Wall -O2 -o clean clean.c
+	cp clean /opt/filesystem/root
+main:
+	arm-linux-gnu-gcc -Wall -O2 -o main main.c -lpthread
+	cp main /opt/filesystem/root
+	rm -rf main

+ 1 - 0
README.md

@@ -0,0 +1 @@
+ECHO ´ŚÓښعŐ×´ĚŹĄŁ

+ 57 - 0
clien.c

@@ -0,0 +1,57 @@
+#include "include/tcp.h"
+#include "include/udp.h"
+
+#include <unistd.h>
+#include <pthread.h>
+#include <string.h>
+
+#if 0
+#define SELF_PORT_UDP 5002
+#define SELF_PORT_TCP 5003
+#define SELF_IP "192.168.188.136"		//自己IP
+#define OTHER_PORT_UDP 5004
+#define OTHER_PORT_TCP 5005
+#define OTHER_IP "192.168.188.136"		//他人IP
+#define BROADCAST_PORT_UDP 5200
+#define BROADCAST_RECV_IP INADDR_ANY		//广播IP
+
+#else
+#define OTHER_PORT_UDP 5002
+#define OTHER_PORT_TCP 5003
+#define OTHER_IP "192.168.188.136"		//自己IP
+#define SELF_PORT_UDP 5004
+#define SELF_PORT_TCP 5005
+#define SELF_IP "192.168.188.136"		//他人IP
+#define BROADCAST_PORT_UDP 5200
+#define BROADCAST_SEND_IP INADDR_BROADCAST		//广播IP
+#endif
+
+void *tcp_recv(void *arg)
+{
+	struct sockaddr_in recv_cin;
+	char recv_str[BUFSIZ];
+	static char *send_str = "hello,i have recv!";
+
+//	tcp_recv_init(SELF_IP, SELF_PORT_TCP);
+	while (1)
+	{
+//		tcp_recv_from(&recv_cin, recv_str);
+//		printf("3.%s\n", recv_str);
+		udp_broad_send_to(BROADCAST_SEND_IP, BROADCAST_PORT_UDP, (struct msg *)send_str, strlen(send_str)+1);
+		sleep(1);
+	}
+
+	pthread_exit(NULL);
+}
+
+
+int main(int argc, char *argv[])
+{
+	pthread_t tid1;	
+	
+	pthread_create(&tid1, NULL, tcp_recv, NULL);
+	
+	pthread_join(tid1, NULL);
+
+	return 0;
+}

+ 19 - 0
include/debug.h

@@ -0,0 +1,19 @@
+
+/*Comment/uncomment the following line to disable/enable debugging,
+ OR define(or NOT) it in Makefile.
+*/
+//#define NDEBUG
+
+#undef pr_debug					/* undef it, just in case */
+
+#ifndef NDEBUG
+#ifdef __KERNEL__
+		/* This one if debugging is on, and kernel space */
+#define pr_debug(fmt, args...) printk( KERN_ERR fmt, ## args)
+#else
+		 /* This one for user space */
+#define pr_debug(fmt, args...) fprintf(stderr, fmt, ## args)
+#endif
+#else
+#define pr_debug(fmt, args...)	/* not debugging: nothing */
+#endif

+ 281 - 0
include/dlist.h

@@ -0,0 +1,281 @@
+#ifndef __DLIST_H
+#define __DLIST_H
+
+/* This file is from Linux Kernel (include/linux/list.h)
+* and modified by simply removing hardware prefetching of list items.
+* Here by copyright, credits attributed to wherever they belong.
+* Kulesh Shanmugasundaram (kulesh [squiggly] isis.poly.edu)
+*/
+
+/*
+* Simple doubly linked list implementation.
+*
+* Some of the internal functions (“__xxx”) are useful when
+* manipulating whole lists rather than single entries, as
+* sometimes we already know the next/prev entries and we can
+* generate better code by using them directly rather than
+* using the generic single-entry routines.
+*/
+/**
+ * container_of - cast a member of a structure out to the containing structure
+ *
+ * @ptr:	the pointer to the member.
+ * @type:	the type of the container struct this is embedded in.
+ * @member:	the name of the member within the struct.
+ *
+ */
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+
+#define container_of(ptr, type, member) ({			\
+        const typeof( ((type *)0)->member ) *__mptr = (ptr);	\
+        (type *)( (char *)__mptr - offsetof(type,member) );})
+/*
+ * These are non-NULL pointers that will result in page faults
+ * under normal circumstances, used to verify that nobody uses
+ * non-initialized list entries.
+ */
+#define LIST_POISON1  ((void *) 0x00100100)
+#define LIST_POISON2  ((void *) 0x00200
+
+struct list_head {
+	struct list_head *next, *prev;
+};
+
+#define LIST_HEAD_INIT(name) { &(name), &(name) }
+
+//使name变量的前向指针和后向指针都指向自己
+#define LIST_HEAD(name) \
+struct list_head name = LIST_HEAD_INIT(name)
+
+// (对小结构体指针变量的初始化)struct list_head *ptr 
+#define INIT_LIST_HEAD(ptr) do { \
+	(ptr)->next = (ptr); (ptr)->prev = (ptr); \
+} while (0)
+
+/*
+* Insert a new entry between two known consecutive entries.
+*
+* This is only for internal list manipulation where we know
+* the prev/next entries already!
+*/
+static inline void __list_add(struct list_head *new,
+				struct list_head *prev,
+				struct list_head *next)
+{
+	next->prev = new;
+	new->next = next;
+	new->prev = prev;
+	prev->next = new;
+}
+
+/**
+* list_add – add a new entry
+* @new: new entry to be added
+* @head: list head to add it after
+*
+* Insert a new entry after the specified head.
+* This is good for implementing stacks.
+*/
+//将new指向的节点插入到head的后边
+static inline void list_add(struct list_head *new, struct list_head *head)
+{
+	__list_add(new, head, head->next);
+}
+
+/**
+* list_add_tail – add a new entry
+* @new: new entry to be added
+* @head: list head to add it before
+*
+* Insert a new entry before the specified head.
+* This is useful for implementing queues.
+*/
+//将new指向的节点插入到head的前面
+static inline void list_add_tail(struct list_head *new, struct list_head *head)
+{
+	__list_add(new, head->prev, head);
+}
+
+/*
+* Delete a list entry by making the prev/next entries
+* point to each other.
+*
+* This is only for internal list manipulation where we know
+* the prev/next entries already!
+*/
+//删除prev和next之间的结点
+static inline void __list_del(struct list_head *prev, struct list_head *next)
+{
+	next->prev = prev;
+	prev->next = next;
+}
+
+/**
+* list_del – deletes entry from list.
+* @entry: the element to delete from the list.
+* Note: list_empty on entry does not return true after this, the entry is in an undefined state.
+*/
+//entry 是将要被删除的结点,linux内核链表不会执行free操作,而是由用户来操作。
+static inline void list_del(struct list_head *entry)
+{
+	__list_del(entry->prev, entry->next);
+	entry->next = (void *) 0;
+	entry->prev = (void *) 0;
+}
+
+/**
+* list_del_init – deletes entry from list and reinitialize it.
+* @entry: the element to delete from the list.
+*/
+//entry指向的结点被删除之后,使其指针域都指向其本身
+static inline void list_del_init(struct list_head *entry)
+{
+	__list_del(entry->prev, entry->next);
+	INIT_LIST_HEAD(entry);
+}
+
+/**
+* list_move – delete from one list and add as another’s head
+* @list: the entry to move
+* @head: the head that will precede our entry
+*/
+//删除list指向的结点,将其插入到head的后边。
+static inline void list_move(struct list_head *list,
+				struct list_head *head)
+{
+	__list_del(list->prev, list->next);
+	list_add(list, head);
+}
+
+/**
+* list_move_tail – delete from one list and add as another’s tail
+* @list: the entry to move
+* @head: the head that will follow our entry
+*/
+//删除list指向的结点,将其插入到head的前边
+static inline void list_move_tail(struct list_head *list,
+					struct list_head *head)
+{
+	__list_del(list->prev, list->next);
+	list_add_tail(list, head);
+}
+
+/**
+* list_empty – tests whether a list is empty
+* @head: the list to test.
+*/
+//判断一个链表是否为空
+static inline int list_empty(struct list_head *head)
+{
+	return head->next == head;
+}
+//实现两个链表的合并,将list链表的头结点删除,将其所剩余结点插入到head和at之间
+static inline void __list_splice(struct list_head *list,
+					struct list_head *head)
+{
+	struct list_head *first = list->next;
+	struct list_head *last = list->prev;
+	struct list_head *at = head->next;
+
+	first->prev = head;
+	head->next = first;
+
+	last->next = at;
+	at->prev = last;
+}
+
+/**
+* list_splice – join two lists
+* @list: the new list to add.
+* @head: the place to add it in the first list.
+*/
+static inline void list_splice(struct list_head *list, struct list_head *head)
+{
+if (!list_empty(list))
+__list_splice(list, head);
+}
+
+/**
+* list_splice_init – join two lists and reinitialise the emptied list.
+* @list: the new list to add.
+* @head: the place to add it in the first list.
+*
+* The list at @list is reinitialised
+*///将list链表的头结点的指针指向其本身
+static inline void list_splice_init(struct list_head *list,
+struct list_head *head)
+{
+if (!list_empty(list)) {
+__list_splice(list, head);
+INIT_LIST_HEAD(list);
+}
+}
+
+/**
+* list_entry – get the struct for this entry
+* @ptr:    the &struct list_head pointer.
+* @type:    the type of the struct this is embedded in.
+* @member:    the name of the list_struct within the struct.
+*/
+//该宏的实现可以分为两部分,减号左边为小结构体的实际地址,右边为
+//是小结构体相对于大结构体的偏移量。
+//该宏的返回值是大结构体的地址。
+#define list_entry(ptr, type, member) \
+((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
+
+/**
+* list_for_each    -    iterate over a list
+* @pos:    the &struct list_head to use as a loop counter.
+* @head:    the head for your list.
+*/
+//对小结构体从前向后遍历
+#define list_for_each(pos, head) \
+for (pos = (head)->next; pos != (head); pos = pos->next)
+/**
+* list_for_each_prev    -    iterate over a list backwards
+* @pos:    the &struct list_head to use as a loop counter.
+* @head:    the head for your list.
+*/
+//对小结构体从后向前遍历
+#define list_for_each_prev(pos, head) \
+for (pos = (head)->prev; pos != (head); \
+pos = pos->prev)
+
+/**
+* list_for_each_safe    -    iterate over a list safe against removal of list entry
+* @pos:    the &struct list_head to use as a loop counter.
+* @n:        another &struct list_head to use as temporary storage
+* @head:    the head for your list.
+*/
+//当遍历当前结点时,记住下一个结点地址,及时当前被遍历的结点意外被删除,
+//也不至于产生断链。
+#define list_for_each_safe(pos, n, head) \
+for (pos = (head)->next, n = pos->next; pos != (head); \
+pos = n, n = pos->next)
+
+/**
+* list_for_each_entry    -    iterate over list of given type
+* @pos:    the type * to use as a loop counter.
+* @head:    the head for your list.
+* @member:    the name of the list_struct within the struct.
+*/
+//对大结构体的遍历,根据小结构来遍历大结构体,pos为大结构体地址
+#define list_for_each_entry(pos, head, member)                \
+for (pos = list_entry((head)->next, typeof(*pos), member);    \
+&pos->member != (head);                     \
+pos = list_entry(pos->member.next, typeof(*pos), member))
+
+/**
+* list_for_each_entry_safe – iterate over list of given type safe against removal of list entry
+* @pos:    the type * to use as a loop counter.
+* @n:        another type * to use as temporary storage
+* @head:    the head for your list.
+* @member:    the name of the list_struct within the struct.
+*/
+#define list_for_each_entry_safe(pos, n, head, member)            \
+for (pos = list_entry((head)->next, typeof(*pos), member),    \
+n = list_entry(pos->member.next, typeof(*pos), member);    \
+&pos->member != (head);                     \
+pos = n, n = list_entry(n->member.next, typeof(*n), member))
+
+#endif

+ 121 - 0
include/mychat.h

@@ -0,0 +1,121 @@
+#ifndef _MYCHAT_H
+#define _MYCHAT_H
+
+#include "debug.h"
+#include "dlist.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+      
+#include <fcntl.h>
+#include <unistd.h>
+#include <signal.h>
+#include <pthread.h>
+#include <errno.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#define BLACKLOG 5
+#define UDP_MAXSIZE 512
+#define TCP_MAXSIZE 5*1024
+
+/*UDP收到客户端的消息*/
+struct msg_udp 
+{
+	int type_udp;			//类型
+	char self_name[20];		//自己的名字
+	char aim_name[20];		//目标名字
+	unsigned int data_size;	//数据大小0 ~ 65535
+	char data[UDP_MAXSIZE+1];	//数据
+	struct sockaddr_in self_addr_udp;		//自己udp地址
+	struct sockaddr_in self_addr_tcp;		//自己tcp地址
+	struct sockaddr_in aim_addr_udp;		//目标地址
+};
+
+/*添加尾部的结构体*/
+struct servmsg_udp
+{
+	struct msg_udp recvmsg;		//UDP信息
+	
+	struct list_head servmsg_udp_list;
+};
+
+/*UDP消息类型*/
+enum msg_udp_type
+{
+	LOG_IN = 1,      //登录	--1
+	REFRESH,         //要求刷新用户在线用户(重新打印在线用户)	--2
+	CHAT_ONE,        //私聊消息	--3
+	CHAT_ALL,        //群聊消息	--4
+	DOWNLOAD,        //从服务器下载文件(下载之前先打印文件列表)	--5
+	UPLOAD,          //上传文件到服务器	--6
+	OFFLINE,         //下线通知	--7
+	OVER,            //服务器发送本次消息结束	--8
+	ERROR,           //重复登录	--9
+	FILE_NAME,       //发送文件列表	--10
+	FILE_ERROR,      //选择文件名失败	--11
+	NO_HANDLE		 //不做处理	--12
+};
+
+/*服务器接收消息后,创建的在线用户列表*/
+struct user_info
+{
+	char user_name[20];					//用户名字
+	int  id;	     					//id		//是否在线
+	struct sockaddr_in cli_addr_udp;	//客户端udp地址
+	struct sockaddr_in cli_addr_tcp;	//客户端tcp地址
+
+	struct list_head user_info_list;
+};
+
+/*********************TCP结构体******************************/
+/*TCP收到客户端的消息*/
+struct msg_tcp 
+{
+	int type_tcp;			//类型
+	char self_name[20];		//自己的名字
+	char aim_name[20];		//目标名字
+	unsigned int data_size;	//数据大小0 ~ 65535
+	unsigned int alto_size;	//总大小0 ~ 65535
+	unsigned int data_sequence;	//数据顺序	
+	char data[TCP_MAXSIZE+1];	//数据
+	struct sockaddr_in self_addr_tcp;		//自己tcp地址
+	struct sockaddr_in aim_addr_tcp;		//目标地址
+};
+
+/*添加尾部的结构体*/
+struct servmsg_tcp
+{
+	struct msg_tcp recvmsg;		//TCP信息
+	
+	struct list_head servmsg_tcp_list;
+};
+
+/*TCP消息类型*/
+enum msg_tcp_type
+{
+	DOWN_IF	 = 20,		//下载询问
+	DOWN_YES,			//允许下载
+	DOWN_NO,			//拒绝下载
+	DOWN_START,			//开始下载
+	DOWN_READY,			//开始下载
+	DOWN_LOADING,		//正在下载
+	DOWN_END,			//下载结束
+	UP_YES,				//允许上传
+	UP_NO				//拒绝上传
+};
+
+struct down_info
+{
+	char user_name[20];					//用户名字
+	int  file_wrfd;	     				//文件fd		
+	struct sockaddr_in cli_addr_tcp;	//客户端tcp地址
+
+	struct list_head down_info_list;
+};
+
+#endif

+ 96 - 0
include/rtc.h

@@ -0,0 +1,96 @@
+#ifndef _RTC_H
+#define _RTC_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <strings.h>
+
+struct rtc_time {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	int tm_year;
+	int tm_wday;
+	int tm_yday;
+	int tm_isdst;
+};
+
+int rtc_fd;
+extern int open_rtc(void)
+{
+	system("rmmod *.ko");
+	system("insmod rtc_dev.ko");
+	system("insmod rtc_drv.ko");
+
+	rtc_fd =open("/dev/rtc",O_RDWR);
+	if(rtc_fd<0)
+	{
+		printf("cannot open /dev/rtc!\n");
+		return -1;
+	}
+
+	return 0;
+}
+
+extern char *read_rtc(void)
+{
+	struct rtc_time read_time;
+	static char buf[50];
+	int ret;
+	ret = read(rtc_fd, &read_time, sizeof(read_time));
+	if (ret == 0){
+		sprintf(buf, "%d-%d-%d %d:%d:%d", read_time.tm_year, read_time.tm_mon, read_time.tm_mday,
+			 read_time.tm_hour, read_time.tm_min, read_time.tm_sec);
+	}
+	else{
+		printf("cannot read!\n");
+		return NULL;
+	}
+
+	return buf;
+}
+
+extern int write_rtc(char *str)
+{
+	struct rtc_time write_time;
+	int ret;
+	char input_time[512]= "2012-11-15 10:25:13";
+	char *p = NULL;
+	int i;
+	
+	if (str){
+		bzero(input_time, 512);
+		strcpy(input_time, str);
+	}
+
+	p = strtok(input_time, " ");
+	p = strtok(NULL, ":");
+	for (i = 0; p; i++) {
+		*(&write_time.tm_hour-i) = atoi(p);
+		p = strtok(NULL, ":");
+	}
+
+	p = strtok(input_time, "-");
+	for (i = 0; p; i++) {
+		*(&write_time.tm_year-i) = atoi(p);
+		p = strtok(NULL, "-");
+	}
+
+	ret = write(rtc_fd, &write_time, sizeof(write_time));
+	if (ret != 0){
+		printf("cannot write!\n");
+		return -1;
+	}
+
+	return 0;
+}
+
+#endif
+

+ 218 - 0
include/tcp.h

@@ -0,0 +1,218 @@
+#ifndef _TCP_H
+#define _TCP_H
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <strings.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <errno.h>
+
+#include "debug.h"
+#include "mychat.h"
+
+#define BACKLOG 5
+
+/* 信息检测 */
+extern char tcp_info_check(struct sockaddr_in *sin)
+{
+	char ip[16];
+	u_short port;							
+	inet_ntop(AF_INET, (void *)&(sin->sin_addr.s_addr), ip, sizeof(ip));
+	port = ntohs(sin->sin_port);				
+	pr_debug("信息检测地址:%s:%d\n", ip, port);
+	
+	return 1;
+}
+
+
+/* 接收到(IP, 端口, 客户信息, 内容) */
+extern char tcp_recv_from(char *ip, int port, struct sockaddr_in *cin, char *str)
+{
+	int ret = -1;
+	struct sockaddr_in sin;
+	
+	int tcp_recv_fd;
+	int tcp_newfd;
+	tcp_recv_fd = socket(AF_INET, SOCK_STREAM, 0);
+	
+//	int enable = 1;
+//	setsockopt(tcp_recv_fd, SOL_tcp_recv_fd, SO_REUSEADDR,  &enable, sizeof(int));
+//	int nNetTimeout=1000;//1秒
+    //发送时限
+//	setsockopt(tcp_recv_fd, SOL_SOCKET, SO_SNDTIMEO, &nNetTimeout, sizeof(int));
+    //接收时限
+//	setsockopt(tcp_recv_fd, SOL_SOCKET, SO_RCVTIMEO, &nNetTimeout, sizeof(int));
+
+	sin.sin_family = AF_INET;
+	sin.sin_port = htons(port);
+	sin.sin_addr.s_addr = inet_addr(ip);
+	bzero(sin.sin_zero, 8);
+
+	ret = bind(tcp_recv_fd, (struct sockaddr*)&sin, sizeof(sin));
+	if (ret < 0) {
+		perror("tcp_recv_from->bind\nError:");
+		tcp_info_check(&sin);
+		return ret;	
+	}
+
+	listen(tcp_recv_fd, BACKLOG);
+
+	char buf[BUFSIZ];
+	struct sockaddr cin_in;
+	socklen_t addrlen = sizeof(cin_in);
+
+	tcp_newfd = accept(tcp_recv_fd, &cin_in, &addrlen);
+	if (tcp_newfd < 0) {
+		perror("tcp_recv_from->accept\nError:");
+		return ret;						
+	}
+	else
+	{
+		bzero(buf, BUFSIZ);
+		recv(tcp_newfd, buf, BUFSIZ, 0);
+		buf[BUFSIZ-1] = '\0';
+		memcpy(str, &buf, BUFSIZ);
+		memcpy(cin, &cin_in, sizeof(struct sockaddr_in));
+	}
+
+	close(tcp_recv_fd);
+	
+	return 1;						
+}
+
+/* 发送(IP,端口,信息) */
+extern char tcp_send_to(char *ip, unsigned int port, char *str, int size_str)
+{
+	int ret = -1;
+	struct sockaddr_in cin;
+	
+	int tcp_send_fd;
+	tcp_send_fd = socket(AF_INET, SOCK_STREAM, 0);
+//	int enable = 1;
+//	setsockopt(tcp_recv_fd, SOL_tcp_recv_fd, SO_REUSEADDR,  &enable, sizeof(int));
+//	int nNetTimeout=1000;//1秒
+    //发送时限
+//	setsockopt(tcp_send_fd, SOL_SOCKET, SO_SNDTIMEO, &nNetTimeout, sizeof(int));
+    //接收时限
+//	setsockopt(tcp_send_fd, SOL_SOCKET, SO_RCVTIMEO, &nNetTimeout, sizeof(int));
+
+	cin.sin_family = AF_INET;
+	cin.sin_port = htons(port);
+	cin.sin_addr.s_addr = inet_addr(ip);
+	bzero(cin.sin_zero, 8);
+
+
+	ret = connect(tcp_send_fd, (struct sockaddr*)&cin, sizeof(cin));
+	if (ret < 0) {
+		perror("tcp_send_to->connect\nError:");
+		tcp_info_check(&cin);
+		return ret;	
+	}
+
+	ret = send(tcp_send_fd, str, size_str, 0);
+	if (ret < 0) {
+		perror("tcp_send_to->send\nError:");
+		return ret;						
+	}
+
+	close(tcp_send_fd);
+	
+	return 1;						
+}
+
+
+
+/* 接收到(地址, 客户信息, 内容) */
+extern int tcp_addr_ini(struct sockaddr_in *sin)
+{
+	int ret = -1;
+	int tcp_recv_addr_fd;	
+	
+	tcp_recv_addr_fd = socket(AF_INET, SOCK_STREAM, 0);
+//	int enable = 1;
+//	setsockopt(tcp_recv_addr_fd, SOL_tcp_recv_fd, SO_REUSEADDR,  &enable, sizeof(int));
+//	int nNetTimeout=1000;//1秒
+    //发送时限
+//	setsockopt(tcp_recv_addr_fd, SOL_SOCKET, SO_SNDTIMEO, &nNetTimeout, sizeof(int));
+    //接收时限
+//	setsockopt(tcp_recv_addr_fd, SOL_SOCKET, SO_RCVTIMEO, &nNetTimeout, sizeof(int));
+	
+	ret = bind(tcp_recv_addr_fd, (struct sockaddr*)sin, sizeof(struct sockaddr_in));
+	if (ret < 0) {
+		perror("tcp_addr_ini->bind\nError:");
+		tcp_info_check(sin);
+		return ret;	
+	}
+
+	listen(tcp_recv_addr_fd, BACKLOG);
+	
+	return tcp_recv_addr_fd;
+}
+
+/************************(addr, 客户信息, 内容)***************************************/
+/* 接收到(地址, 客户信息, 内容) */
+extern char tcp_addr_recv_from(int tcp_recv_addr_fd, struct sockaddr_in *cin, struct msg_tcp *msg)
+{
+	int ret = -1;
+	int tcp_addr_newfd;
+	struct sockaddr cin_in;
+	struct msg_tcp msg_buf;
+	
+	socklen_t addrlen = sizeof(cin_in);
+	tcp_addr_newfd = accept(tcp_recv_addr_fd, &cin_in, &addrlen);
+	if (tcp_addr_newfd < 0) {
+		perror("tcp_addr_ini->accept\nError:");
+		return tcp_addr_newfd;						
+	}	
+	memcpy(cin, &cin_in, sizeof(struct sockaddr_in));
+	
+	ret = recv(tcp_addr_newfd, &msg_buf, sizeof(msg_buf), 0);
+	if (ret < 0) //真正出错了
+	{
+		perror("tcp_addr_recv_from");
+		return ret;	
+	}	
+	memcpy(msg, &msg_buf, sizeof(msg_buf));
+	
+	close(tcp_addr_newfd);
+	return 1;						
+}
+
+/* 发送(地址,信息, 大小) */
+extern char tcp_addr_send_to(struct sockaddr_in *cin, struct msg_tcp *msg, int msgsize)
+{
+	int ret = -1;	
+	int tcp_send_addr_fd;
+	tcp_send_addr_fd = socket(AF_INET, SOCK_STREAM, 0);
+	
+//	int nNetTimeout=1000;//1秒
+    //发送时限
+//	setsockopt(tcp_send_addr_fd, SOL_SOCKET, SO_SNDTIMEO, &nNetTimeout, sizeof(int));
+    //接收时限
+//	setsockopt(tcp_send_addr_fd, SOL_SOCKET, SO_RCVTIMEO, &nNetTimeout, sizeof(int));
+		
+	ret = connect(tcp_send_addr_fd, (struct sockaddr*)cin, sizeof(struct sockaddr_in));
+	if (ret < 0) {
+		perror("tcp_addr_send_to->connect\nError:");
+		tcp_info_check(cin);
+		return ret;	
+	}
+
+	ret = send(tcp_send_addr_fd, msg, msgsize, 0);
+
+	if (ret < 0) {
+		perror("tcp_addr_send_to->send\nError:");
+		return ret;						
+	}
+	
+	close(tcp_send_addr_fd);
+	
+	return 1;						
+}
+
+#endif

+ 227 - 0
include/udp.h

@@ -0,0 +1,227 @@
+#ifndef _UDP_H
+#define _UDP_H
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <strings.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <errno.h>
+#include "debug.h"
+
+#include "mychat.h"
+
+/********************UDP广播 点对点通信*************************/
+/* 信息检测 */
+extern char udp_info_check(struct sockaddr_in *sin)
+{
+	if (!sin)
+	{
+		pr_debug("地址为空\n");
+		return -1;
+	}
+	char ip[16];
+	u_short port;							
+	inet_ntop(AF_INET, (void *)&(sin->sin_addr.s_addr), ip, sizeof(ip));
+	port = ntohs(sin->sin_port);				
+	pr_debug("信息检测地址:%s:%d\n", ip, port);
+	
+	return 1;
+}
+
+/* 接收到(绑定IP, 绑定端口, 客户信息, 内容) */
+extern char udp_recv_from(char *ip, int port, struct sockaddr_in *recv_cin, struct msg_udp *recv_msg)
+{
+	int ret = -1;
+	struct sockaddr_in sin;
+	
+	int udp_recv_fd;
+	udp_recv_fd = socket(AF_INET, SOCK_DGRAM, 0);
+    if(udp_recv_fd < 0)  
+    {  
+		perror("udp_recv_from->socket\nError:");
+        return udp_recv_fd;  
+    }  
+	
+	sin.sin_family = AF_INET;
+	sin.sin_port = htons(port);
+	sin.sin_addr.s_addr = inet_addr(ip); 
+	bzero(sin.sin_zero, 8);
+
+	do{
+		ret = bind(udp_recv_fd, (struct sockaddr*)&sin, sizeof(sin));
+		if (ret < 0) {
+			perror("udp_recv_from->bind\nError:");
+			udp_info_check(&sin);
+			sleep(1);
+		}
+	}
+	while (ret < 0);
+	
+	struct msg_udp msg_buf;
+	struct sockaddr cin_in;
+	socklen_t addrlen= sizeof(struct sockaddr); 
+      
+	bzero(&msg_buf, sizeof(msg_buf));
+	bzero(&cin_in, addrlen);
+	ret = recvfrom(udp_recv_fd, &msg_buf, sizeof(msg_buf), 0, &cin_in, &addrlen);
+	if (ret < 0) {
+		perror("udp_recv_from->recvfrom\nError:");
+		return ret;						
+	}
+	memcpy(recv_msg, &msg_buf, sizeof(msg_buf));
+	memcpy(recv_cin, &cin_in, sizeof(struct sockaddr_in));
+	
+	close(udp_recv_fd);
+	return 1;						
+}
+
+/* 发送(IP,端口,信息) */
+extern char udp_send_to(char *ip, unsigned int port, struct msg_udp *str, int size_str)
+{
+	int ret = -1;
+	struct sockaddr_in sin;
+
+	int udp_send_fd;
+	udp_send_fd = socket(AF_INET, SOCK_DGRAM, 0);
+    if(udp_send_fd < 0)  
+    {  
+		perror("udp_send_to->socket\nError:");
+        return udp_send_fd;  
+    }  
+	
+	sin.sin_family = AF_INET;
+	sin.sin_port = htons(port);
+	sin.sin_addr.s_addr = inet_addr(ip);
+	bzero(sin.sin_zero, 8);
+			
+	ret = sendto(udp_send_fd, str, size_str, 0, (struct sockaddr*)&sin, sizeof(struct sockaddr_in));
+	if (ret < 0) {
+		perror("udp_send_to->sendto\nError:");
+		udp_info_check(&sin);
+		return ret;						
+	}
+
+	close(udp_send_fd);
+	return 1;						
+}
+
+/* 发送(地址,信息, 大小) */
+extern char udp_addr_send_to(struct sockaddr_in *sin, struct msg_udp *str, int size_str)
+{
+	int ret = -1;
+	int udp_send_fd;
+	udp_send_fd = socket(AF_INET, SOCK_DGRAM, 0);
+    if(udp_send_fd < 0)  
+    {  
+		perror("udp_addr_send_to->socket\nError:");
+        return udp_send_fd;  
+    }  
+	
+	ret = sendto(udp_send_fd, str, size_str, 0, (struct sockaddr*)sin, sizeof(*sin));
+	if (ret < 0) {
+		perror("udp_addr_send_to->sendto\nError:");
+		udp_info_check(sin);
+		return ret;						
+	}
+
+	close(udp_send_fd);
+	return 1;						
+}
+
+/********************UDP广播 接受与发送*************************/
+/* 接收到(绑定IP, 绑定端口, 客户信息, 内容) */
+extern char udp_broad_recv_from(uint32_t ip, int port, struct sockaddr_in *online_cin, struct msg_udp *recv_msg)
+{
+	int ret = -1;
+	struct sockaddr_in sin;
+	
+	int udp_broad_recv_fd;
+	udp_broad_recv_fd = socket(AF_INET, SOCK_DGRAM, 0);
+    if(udp_broad_recv_fd < 0)  
+    {  
+		perror("udp_broad_recv_from->socket\nError:");
+        return udp_broad_recv_fd;  
+    }  
+
+	const int opt = 1;  
+    //设置该套接字为广播类型,  
+    ret = setsockopt(udp_broad_recv_fd, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));  
+    if(ret < 0)  
+    {  
+		perror("udp_broad_recv_from->setsockopt\nError:");
+        return ret;  
+    }  
+	
+	sin.sin_family = AF_INET;
+	sin.sin_port = htons(port);
+	sin.sin_addr.s_addr = htonl(ip);//inet_addr(ip); 
+	bzero(sin.sin_zero, 8);
+
+	do{
+		ret = bind(udp_broad_recv_fd, (struct sockaddr*)&sin, sizeof(sin));
+		if (ret < 0) {
+			perror("udp_broad_recv_from->bind\nError:");
+			udp_info_check(&sin);
+			sleep(1);
+		}
+	}
+	while (ret < 0);
+
+	struct msg_udp msg_buf;
+	struct sockaddr cin_in;
+	socklen_t addrlen= sizeof(cin_in); 
+      
+	bzero(&msg_buf, sizeof(msg_buf));
+	bzero(&cin_in, addrlen);
+	ret = recvfrom(udp_broad_recv_fd, &msg_buf, sizeof(msg_buf), 0, &cin_in, &addrlen);
+	if (ret < 0) {
+		perror("udp_broad_recv_from->recvfrom\nError:");
+		return ret;						
+	}
+	memcpy(recv_msg, &msg_buf, sizeof(msg_buf));
+	memcpy(online_cin, &cin_in, addrlen);
+	
+	close(udp_broad_recv_fd);
+	return 1;						
+}
+
+/* 发送(IP,端口,信息) */
+extern char udp_broad_send_to(uint32_t ip, unsigned int port, struct msg_udp *str, int size_str)
+{
+	int ret = -1;
+	struct sockaddr_in sin;
+
+	int udp_broad_send_fd;
+	udp_broad_send_fd = socket(AF_INET, SOCK_DGRAM, 0);
+
+	const int opt = 1;  
+    //设置该套接字为广播类型,  
+    ret = setsockopt(udp_broad_send_fd, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));  
+    if(ret < 0)  
+    {  
+		perror("udp_broad_send_to->setsockopt\nError:");
+        return ret;  
+    }  
+	
+	sin.sin_family = AF_INET;
+	sin.sin_port = htons(port);
+	sin.sin_addr.s_addr = htonl(ip); //inet_addr(ip);
+	bzero(sin.sin_zero, 8);
+			
+	ret = sendto(udp_broad_send_fd, str, size_str, 0, (struct sockaddr*)&sin, sizeof(sin));
+	if (ret < 0) {
+		perror("udp_broad_send_to->sendto\nError:");
+		udp_info_check(&sin);
+        return ret;  
+    }  
+
+	close(udp_broad_send_fd);
+	return 1;
+}
+
+#endif

+ 60 - 0
rtc/rtc_dev.c

@@ -0,0 +1,60 @@
+#include<linux/module.h>
+#include<linux/init.h>
+#include <linux/platform_device.h>
+#include<linux/ioport.h>
+
+#if 0
+struct platform_device 
+{
+	const char		* name;
+	u32				id;
+	struct device		dev;
+	u32				num_resources;
+	struct resource	* resource;
+};
+
+#endif
+
+
+static struct resource fs_rtc_resource[]={
+	[0]	={
+		.start	=0x57000040,
+		.end	=0x57000044,
+		.flags 	= IORESOURCE_MEM,
+	},
+	[1]	={
+		.start	=12,			//0x57000070
+		.end	=19,			//0x5700008c 18 17 16 15
+		.flags 	= IORESOURCE_MEM,
+	},
+};
+
+void rtc_release(struct device *dev)
+{	
+	
+}
+
+static struct platform_device fs_device_rtc = {
+	.name				="fs2410-rtc",
+	.id 				=-1,
+	.resource			=fs_rtc_resource,
+	.num_resources		= ARRAY_SIZE(fs_rtc_resource),
+	.dev				={
+		.release		=rtc_release,
+	},
+};
+
+static int __init fs2410_rtc_dev_init(void)
+{
+	platform_device_register(&fs_device_rtc);
+	return 0;
+}
+
+static void __exit fs2410_rtc_dev_exit(void)
+{
+	platform_device_unregister(&fs_device_rtc);
+}
+module_init(fs2410_rtc_dev_init);
+module_exit(fs2410_rtc_dev_exit);
+MODULE_LICENSE("GPL");
+

+ 221 - 0
rtc/rtc_drv.c

@@ -0,0 +1,221 @@
+#include <linux/fs.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/cdev.h>
+#include <linux/ioport.h>
+#include <linux/pci.h>
+#include <linux/rtc.h>
+#include <asm/uaccess.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <linux/interrupt.h>
+#include <asm/mach/irq.h>
+#include <asm/arch/regs-gpio.h>
+#include <linux/poll.h>
+#include <linux/platform_device.h>
+
+
+#define BUFSIZE          4096	/* vuart buf size */
+static volatile unsigned long *rtccon =NULL;	//使能 RTCCON &= ~(1<<0)
+
+static volatile unsigned long *bcdyear =NULL;	//年 BCDYEAR = 0xc
+static volatile unsigned long *bcdmon =NULL;	//月 BCDMON = 0xb
+static volatile unsigned long *bcdday =NULL;	//星期 BCDDAY = 0x3
+static volatile unsigned long *bcddate =NULL;	//日 BCDDATE = 0xe
+
+static volatile unsigned long *bcdhour =NULL;	//时BCDMON = 0xb
+static volatile unsigned long *bcdmin =NULL;	//分 BCDDAY = 0x3
+static volatile unsigned long *bcdsec =NULL;	//秒BCDDATE = 0xe
+    
+static unsigned int fs2410_rtc_major =0;
+static struct class *fs2410_rtc_class =NULL;
+static struct rtc_time *user_time;
+
+static int fs2410_rtc_open(struct inode *inode, struct file *file)
+{
+	/* 使能RTC */
+	*rtccon |= (1<<0);
+
+	return 0;
+}
+
+static ssize_t fs2410_rtc_write(struct file *file, const char __user *buf, size_t count, loff_t *opps)
+{
+	int ret;
+	int i;
+	int year;
+	int mon;
+	int date;
+	int day;
+	int hour;
+	int min;
+	int sec;
+	int hig;
+	int low;
+	user_time = (struct rtc_time *)kzalloc(sizeof(*user_time), GFP_KERNEL);
+	ret = copy_from_user(user_time, buf, count);
+
+	for (i = 0; i<6; i++) {
+		printk("%d ", *(&(user_time->tm_year) - i));
+	}	
+	printk("\n");
+	
+	//年2012-1970	
+	year = user_time->tm_year;
+	year = (year  - 1970) & 0xff;
+	writeb(year, bcdyear);
+	//月12 -> 1 0001
+	mon = user_time->tm_mon;
+	hig = mon/10;
+	low = mon%10;
+	mon = (mon &~0x1f)|((hig<<4)|low);
+	writeb(mon, bcdmon);
+	//日24 -> 01 0010
+	date = user_time->tm_mday;
+	hig = date/10;
+	low = date%10;
+	date = (date &~0x3f)|((hig<<4)|low);
+	writeb(date, bcddate);	
+	//星期3 ->  3
+	day = user_time->tm_wday;
+	day = (day & 3);
+	writeb(day, bcdday);
+	//时18 ->  00 0000	
+	hour = user_time->tm_hour;
+	hig = hour/10;
+	low = hour%10;
+	hour = (hour &~0x3f)|((hig<<4)|low);
+	writeb(hour, bcdhour);
+	//分 56 -> 000 0000
+	min = user_time->tm_min;
+	hig = min/10;
+	low = min%10;
+	min = (min &~0x7f)|((hig<<4)|low);
+	writeb(min, bcdmin);
+	//秒 34 -> 000 0000
+	sec = user_time->tm_sec;
+	hig = sec/10;
+	low = sec%10;
+	sec = (sec &~0x7f)|((hig<<4)|low);
+	writeb(sec, bcdsec);
+	
+	return 0;
+}
+
+static ssize_t fs2410_rtc_read(struct file *file, char __user *buf, size_t count, loff_t *off)
+{
+	int ret;
+	int year;
+	int mon;
+	int date;
+	int day;
+	int hour;
+	int min;
+	int sec;
+	char ker_buf[BUFSIZE];
+	static struct rtc_time  kernel_time;
+
+	//年2012-1970	
+	year = readb(bcdyear);
+	year = (year & 0xff) + 1970;
+	kernel_time.tm_year = year;
+	//月 1 0001
+	mon = readb(bcdmon);
+	mon = ((mon & (1<<4))>>4)*10 + (*bcdmon & 0xf);
+	kernel_time.tm_mon= mon;
+	//日 01 0010
+	date = readb(bcddate);
+	date = ((date & (3<<4))>>4)*10 + (*bcddate & 0xf);
+	kernel_time.tm_mday= date ;
+	//星期 3
+	day = readb(bcdday);
+	day = (day & 3);
+	kernel_time.tm_wday= day;
+	//时 00 0000
+	hour = readb(bcdhour);
+	hour = ((hour& (3<<4))>>4)*10 + (*bcdhour & 0xf);
+	kernel_time.tm_hour= hour;
+	//分 000 0000
+	min = readb(bcdmin);
+	min = ((min & (7<<4))>>4)*10 + (*bcdmin & 0xf);
+	kernel_time.tm_min= min;
+	//秒 000 0000
+	sec = readb(bcdsec);
+	sec = ((sec & (7<<4))>>4)*10 + (*bcdsec & 0xf);
+	kernel_time.tm_sec= sec;
+
+	sprintf(ker_buf, "%d-%d-%d %d %d:%d:%d", year, mon, date, day, hour, min, sec);
+
+	ret = copy_to_user(buf, &kernel_time, count);
+	
+	return 0;
+}
+
+struct file_operations fs2410_rtc_fops ={
+	.owner 	=THIS_MODULE,
+	.open	=fs2410_rtc_open,
+	.write	=fs2410_rtc_write,
+	.read		=fs2410_rtc_read,
+};
+
+int fs2410_rtc_probe(struct platform_device *pdev)
+{
+	struct resource *res;
+	/* 1.获取I/O内存资源 */
+	res =platform_get_resource(pdev, IORESOURCE_MEM, 0);
+
+	/* 2. 映射I/O内存资源 */
+	rtccon =ioremap(res->start, res->end - res->start);
+	
+	bcdyear =	rtccon + 18;	//年 BCDYEAR = 0xc
+	bcdmon =	rtccon + 17;	//月 BCDMON = 0xb
+	bcdday =		rtccon + 16;	//星期 BCDDAY = 0x3
+	bcddate =	rtccon + 15;	//日 BCDDATE = 0xe
+	bcdhour=		rtccon + 14;	//时 BCDDATE = 0xe
+	bcdmin=		rtccon + 13;	//分 BCDDATE = 0xe
+	bcdsec=		rtccon + 12;	//秒 BCDDATE = 0xe
+	/* 3. 注册到上层*/
+	fs2410_rtc_major =register_chrdev(0, "rtcs",&fs2410_rtc_fops);
+	fs2410_rtc_class =class_create(THIS_MODULE, "rtc_class");
+	class_device_create(fs2410_rtc_class, NULL,MKDEV(fs2410_rtc_major, 0), NULL, "rtc");
+	
+	return 0;
+}
+
+int fs2410_rtc_remove(struct platform_device *pdev)
+{
+	class_device_destroy(fs2410_rtc_class, MKDEV(fs2410_rtc_major, 0));
+	class_destroy(fs2410_rtc_class);
+	unregister_chrdev(fs2410_rtc_major, "rtcs");
+	iounmap(rtccon);
+	kfree(user_time);
+	return 0;
+}
+
+struct platform_driver fs2410_rtc_driver ={
+	.probe	=fs2410_rtc_probe,
+	.remove	=fs2410_rtc_remove,
+	.driver	={
+		.owner	=THIS_MODULE,
+		.name	="fs2410-rtc",
+	},
+};	
+
+static int __init fs2410_rtc_drv_init(void)
+{
+	platform_driver_register(&fs2410_rtc_driver);
+	return 0;
+}
+
+static void __exit fs2410_rtc_drv_exit(void)
+{
+	platform_driver_unregister(&fs2410_rtc_driver);
+}
+
+module_init(fs2410_rtc_drv_init);
+module_exit(fs2410_rtc_drv_exit);
+MODULE_LICENSE("GPL");
+
+

+ 71 - 0
serv.c

@@ -0,0 +1,71 @@
+#include "include/tcp.h"
+#include "include/udp.h"
+//#include "rtc.h"
+
+#include <unistd.h>
+#include <pthread.h>
+#include <string.h>
+
+#if 1
+#define SELF_PORT_UDP 5002
+#define SELF_PORT_TCP 5003
+#define SELF_IP "192.168.188.136"		//自己IP
+#define OTHER_PORT_UDP 5004
+#define OTHER_PORT_TCP 5005
+#define OTHER_IP "192.168.188.136"		//他人IP
+#define BROADCAST_PORT_UDP 5200
+#define BROADCAST_RECV_IP INADDR_ANY		//广播IP
+
+#else
+#define OTHER_PORT_UDP 5002
+#define OTHER_PORT_TCP 5003
+#define OTHER_IP "192.168.188.136"		//自己IP
+#define SELF_PORT_UDP 5004
+#define SELF_PORT_TCP 5005
+#define SELF_IP "192.168.188.136"		//他人IP
+#define BROADCAST_PORT_UDP 5200
+#define BROADCAST_SEND_IP INADDR_BROADCAST		//广播IP
+#endif
+
+void *udp_recv(void *arg)
+{
+	struct sockaddr_in recv_cin;
+	struct msg recv_str[BUFSIZ];
+
+	udp_broad_recv_init(BROADCAST_RECV_IP, BROADCAST_PORT_UDP);
+	while (1)
+	{
+		udp_broad_recv_from(&recv_cin, recv_str);
+		printf("2.%s\n", (char *)recv_str);
+	}
+
+	pthread_exit(NULL);
+}
+
+void *tcp_send(void *arg)
+{
+	static char *send_str = "hello world";
+//	open_rtc();
+	while (1)
+	{
+		sleep(1);
+//		send_str =read_rtc();
+//		tcp_send_to(OTHER_IP, OTHER_PORT_TCP, (char *)send_str, strlen(send_str)+1);
+	}
+
+	pthread_exit(NULL);
+}
+
+int main(int argc, char *argv[])
+{
+	pthread_t tid1;	
+	pthread_t tid2;	
+	
+	pthread_create(&tid1, NULL, udp_recv, NULL);
+	pthread_create(&tid2, NULL, tcp_send, NULL);
+	
+	pthread_join(tid1, NULL);
+	pthread_join(tid2, NULL);
+
+	return 0;
+}

+ 26 - 0
test.c

@@ -0,0 +1,26 @@
+#include <stdio.h>
+#include <string.h>
+
+int TCP_RUN_NUMBER;
+/* 重新计时 */
+extern char again_udp(void)
+{
+	if(TCP_RUN_NUMBER == 0)
+	{
+		return 1;
+	}
+	sleep(1);
+	TCP_RUN_NUMBER--;
+	
+	return 0;
+}
+int main(void)
+{
+	TCP_RUN_NUMBER = 5;
+	while(1){
+		if (again_udp())
+			break;
+		printf("1\n");
+	}
+	printf("2\n");
+}