⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socket_protocol_layer.cpp

📁 程序实现了在ip协议之上加一层RUDP协议
💻 CPP
字号:
// SOCKET_Protocol_Layer.cpp: implementation of the SOCKET_Protocol_Layer class.
//
//////////////////////////////////////////////////////////////////////

#include "SOCKET_Protocol_Layer.h"

bool f_SOCKET_Message_Transmit_Queue_Listneing_Handler(Message *msg)
{
	if(msg->Device==DEVICE_TRANSMIT)
	{
		return socket_transmit_protocol_handler_ptr->f_SOCKET_Transmit_Protocol_Handler(msg);
	}
	else
	{
		return control_protocol_handler_ptr->f_SOCKET_Control_Message_Analyse_Handler(msg);
	}
}

void init()
{
	socket_transmit_protocol_handler_ptr=SOCKET_Transmit_Protocol_Handler::get_instance();
	activity_list_manager_ptr=SOCKET_ACTIVITY_LIST_Handler::get_instance();
	seq_manager_ptr=SOCKET_Sequence_Manager::get_instance();
	socket_sr_ptr=Socket_SR::get_instance();
	receive_data_buff=SOCKET_Receive_Data_Buff::get_instance();
	receive_protocol_handler_ptr=SOCKET_Receive_Protocol_Handler::get_instance();
	control_protocol_handler_ptr=SOCKET_Control_Protocol_Handler::get_instance();
		
	if( pthread_mutex_init( &retransmit_queue_lock,NULL) != 0)
		printf("can't get mutex_lock\n");
	else
		printf("succeed init mutex_lock\n");
}

void* send_thread(void* arg)
{
	
}

void* receive_thread(void* arg)
{
	Data_Queue_STR* data_queue_str_ptr;
	int n=0;
	while(1)
	{
		if(data_queue_str_ptr=receive_data_buff->get_Data_Buff_item())
		{
			RUDP* rudp;
			rudp=(RUDP*)data_queue_str_ptr->rudp_data;
			cout<<"处理第:"<<n<<"个包"<<"包类型:"<<rudp->packet_type<<"包序列号:"<<rudp->packet_seq<<endl;
			n++;
			receive_protocol_handler_ptr->f_SOCKET_Receive_Analyse_Protocol_Handler(data_queue_str_ptr);
		}
	}
}

void* port_listen_thread(void* arg)
{
	printf("监听端口:\n");
	int paket_len;
	char* paket_ptr;
	RUDP *rudp;
	while(1)
	{
		paket_len=socket_sr_ptr->receive();
		paket_ptr=socket_sr_ptr->get_recvBuf();
		rudp=(RUDP*)paket_ptr;
		receive_data_buff->add(paket_ptr, paket_len);
	}
}

int main(void)
{
	init();

	pthread_t send_threadID,receive_threadID,port_listen_threadID;
	int ret;
	ret=pthread_create(&send_threadID,NULL,send_thread,NULL);
	if(ret!=0)
	{
		printf ("Create pthread error!n");
		exit(1);
	}
	ret=pthread_create(&receive_threadID,NULL,receive_thread,NULL);
	if(ret!=0)
	{
		printf ("Create pthread error!n");
		exit(1);
	}
	ret=pthread_create(&port_listen_threadID,NULL,port_listen_thread,NULL);
	if(ret!=0)
	{
		printf ("Create pthread error!n");
		exit(1);
	}
	pthread_join(send_threadID,NULL);
	pthread_join(receive_threadID,NULL);
	pthread_join(port_listen_threadID,NULL);
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -