Esempio n. 1
0
int sock_server_init_epoll(int &listenfd , uint16_t server_port)
{
	listenfd = sock_server_init(listenfd, server_port);
	EventSet(&g_Events[MAX_EVENTS], listenfd, AcceptConn, &g_Events[MAX_EVENTS]);
	EventAdd(listenfd, EPOLLIN|EPOLLET, &g_Events[MAX_EVENTS]);
	return listenfd;
}
Esempio n. 2
0
int sock_conn_server(struct sockaddr_in *cliaddr, struct connect_serv *conn) 
{
	int serv_fd;
 	serv_fd = sock_server_init(cliaddr, conn->IP, conn->Port);	
	if( !connect_retry(serv_fd, (const struct sockaddr *)cliaddr, sizeof(struct sockaddr_in)) ){
		close(serv_fd);
		printf("connect server connect fail...\n");
		return -1;
	}
	printf("连接connect server 成功...%d\n", serv_fd);
	return serv_fd;
}
Esempio n. 3
0
// prethread with only main thread doing accept()
void chat_server()
{
	printf("chat server start\n");
	void sig_chld(int);
	pid_t childpid;
	socklen_t clilen;
	struct sockaddr_in cliaddr ;
	int clifd[MAXNCLI];

	if(sock_server_init(listenfd,(uint16_t) SERVER_PORT) < 0)
	{		
		return ;
	}
	signal(SIGCHLD, sig_chld);
	char buf[200] = {0};
	
	tptr =(Thread*) calloc(maxthreads, sizeof(Thread));

	int i;
	iget = iput = 0;
	
	for( i = 0; i < maxthreads  ; i++)
	{
		thread_make(i);
	}
	for( ;  ;) 
	{
		clilen = sizeof(cliaddr);
		connfd = accept(listenfd, (SA*)&cliaddr, &clilen);
		printf("incoming connection from IP: %s Port: %d\n", 
		   inet_ntop(AF_INET, &cliaddr.sin_addr, buf, sizeof(buf)), 
		   ntohs(cliaddr.sin_port));		

		pthread_mutex_lock(&clifd_mutex);
		clifd[iput] = connfd;
		if(++iput == MAXNCLI)
		   iput = 0;
		if(iput == iget)
		   err_quit("iput = iget  ");
		pthread_cond_signal(&clifd_cond);
		pthread_mutex_unlock(&clifd_mutex);
	   		   
	}//for
}
Esempio n. 4
0
int   main(int   argc,   char   *argv[]) 
{



	int sock_serv_fd;
	struct sockaddr_in   cliaddr;
	struct connect_serv   conn_serv;
	unsigned int cid = 1011;
	
	signal(SIGPIPE, sig_handler);

while(1)
{

	if(!protocol_init(cid)){
		printf("协议初始化失败...\n");
		continue;
	}
/*
	protocol_req_ready(&ConnectREQ, &present_info);
	{
		char buff[20] = {0};
		strncpy(buff, ConnectREQ.KEY, 6);
		printf("开始打印协议:\n");
		printf("key:%s\n", buff);
		printf("Length:%d\n", ConnectREQ.Length);
		printf("command:%#x\n", ConnectREQ.Command);
		printf("CID:%d%d%d%d\n",  ConnectREQ.CID[3], ConnectREQ.CID[2], ConnectREQ.CID[1], ConnectREQ.CID[0]);
		printf("IP:%d.%d.%d.%d\n", ConnectREQ.IP[0],ConnectREQ.IP[1],ConnectREQ.IP[2], ConnectREQ.IP[3]);
		printf("MAC:%02x-%02x-%02x-%02x-%02x-%02x\n", ConnectREQ.MAC[0], ConnectREQ.MAC[1], ConnectREQ.MAC[2], ConnectREQ.MAC[3], ConnectREQ.MAC[4],ConnectREQ.MAC[5]);
		printf("presentDate:20%d-days:%d\n",*(unsigned short *)ConnectREQ.PresentDate & 0x7f,  *(unsigned short *)ConnectREQ.PresentDate >> 7);
		printf("presentTime:%d-%d\n", ConnectREQ.PresentTime[0], ConnectREQ.PresentTime[1]);
		printf("model:%s\n", ConnectREQ.Model);
		strncpy(buff, ConnectREQ.Series, 10);
		printf("series:%s\n", buff);
		printf("joinVersion:%d.%d\n", ConnectREQ.JoinConnectVersion[0], ConnectREQ.JoinConnectVersion[1]);
		printf("chargerVersion:%d.%d\n", ConnectREQ.ChargerFWVersion[0], ConnectREQ.ChargerFWVersion[1]);
		printf("CRC:%d\n", *(u16 *)ConnectREQ.CRC16);

	}
*/

	sock_serv_fd = sock_server_init(&cliaddr, JOIN_SERVER1_IP, JOIN_SERVER_PORT);	

	if(  !connect_retry(sock_serv_fd, (const struct sockaddr *)&cliaddr, sizeof(cliaddr)) ){
		// 连接失败,然后连接join_server2_ip
		printf("jion server1 connect fail...\n");
		close(sock_serv_fd);
		if(!(sock_serv_fd = sock_server_init(&cliaddr, JOIN_SERVER2_IP, JOIN_SERVER_PORT))){
			close(sock_serv_fd);
		  	printf("join server2 connect fail...\n");
			continue;
		}
	}
	
	printf("客户端连接成功...\n"); 
	char sock_buff[1024] = {0};

	// 连接join server
	if( !join_conn_serv(sock_serv_fd, &conn_serv)){
		printf("与通信JOIN server 失败, 重新初始化...\n");
		sleep(5);
		continue;
	}

//	if(!join_comfirm_serv(sock_serv_fd, &conn_serv, CHARGER_READY, ONLINE)){
//		printf("发送JOIN SERVER确认连接失败...\n");
//		exit(1);
//	}
//	sleep(2);

//	break;


	printf("\n    #############################################################\n");
	printf("     #############################################################\n");
	printf("关闭JOIN SERVER连接,开始连接CONNECT SERVER...\n");	// JOIN SERVER 连接
	shutdown(sock_serv_fd, SHUT_RDWR);
	close(sock_serv_fd);
	sock_serv_fd = -1;
	memset(&cliaddr, 0, sizeof(cliaddr));
	printf("conn IP:%s port:%d\n",  conn_serv.IP, conn_serv.Port);

int g_CMD = SOCK_CMD_REQ;
while(1){
//	printf("sock_conn_fd=%d\n", sock_serv_fd);
	

	switch(g_CMD)
	{
	
	// 发送新连接
	 case  SOCK_CMD_REQ:
		if((sock_serv_fd = sock_conn_server(&cliaddr, &conn_serv))<0)	
			continue;
		protocol_CSREQ_ready();
		if( !CServer_send(sock_serv_fd, (u8 *)CServer_req, sizeof(CServer_REQ))){
			sock_close(sock_serv_fd);
			memset(&cliaddr, 0, sizeof(cliaddr));
			printf("发送新连接失败...\n");
			sleep(10);
			continue;
		}
		sleep(1);
		g_CMD = SOCK_CMD_FUP;
	continue;
	
	case 	SOCK_CMD_FUP:
	// 发送全更新
		if((sock_serv_fd = sock_conn_server(&cliaddr, &conn_serv))<0)	
			continue;
		protocol_CSFUP_ready();
		if( !CServer_send(sock_serv_fd, (u8 *)CS_FUP, sizeof(CServer_FULL_UPDATE))){
			sock_close(sock_serv_fd);
			memset(&cliaddr, 0, sizeof(cliaddr));
			printf("发送全更新失败...\n");
			sleep(10);
			continue;
		}
		sleep(1);
		g_CMD = SOCK_CMD_HB;
	continue;
	
	case SOCK_CMD_HB:

	// 发送心跳
		if((sock_serv_fd = sock_conn_server(&cliaddr, &conn_serv))<0)	
			continue;
		protocol_CSHB_ready();
		if( !CServer_send(sock_serv_fd, (u8 *)&CS_HB, sizeof(CS_HB))){
			printf("发送心跳失败...\n");
			sock_close(sock_serv_fd);
			memset(&cliaddr, 0, sizeof(cliaddr));
			sleep(2);
		}
		sleep(300);
	break;
	 } // switch
	
      } //  while(1) of conn server
  }		
}