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

📄 socket_transmit_protocol_handler.cpp

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

#include "SOCKET_Transmit_Protocol_Handler.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

SOCKET_Transmit_Protocol_Handler* SOCKET_Transmit_Protocol_Handler::pinstance = NULL;// 初始化指针


/*
	initial, make sure the relate module get the single object
*/
SOCKET_Transmit_Protocol_Handler::SOCKET_Transmit_Protocol_Handler()
{
	activity_list_manager_ptr=SOCKET_ACTIVITY_LIST_Handler::get_instance();
	rudp_enunpacket_manager_ptr=RUDP_EnUnPacket_Handler::get_instance();
	retransmit_timing2_ptr=SOCKET_ReTransmit_Timing2_Protocol_Handler::get_instance();
	socket_sr_ptr=Socket_SR::get_instance();
	sequence_manager_ptr=SOCKET_Sequence_Manager::get_instance();
//	sequence_manager_ptr->add(5);
}

SOCKET_Transmit_Protocol_Handler::~SOCKET_Transmit_Protocol_Handler()
{

}


/*
  factory pattern, make sure there is only one object of this class
*/
SOCKET_Transmit_Protocol_Handler* SOCKET_Transmit_Protocol_Handler::get_instance()
{
	if (pinstance == NULL) 
	{
		pinstance = new SOCKET_Transmit_Protocol_Handler; 
	}
	return pinstance; 
}


/*
  the message's attribute,get the destination's address from activity_list_manager
  revise the packet's sequence number from sequence_manager
  judge T2_ITEM_STR from SOCKET_ReTransmit_Timing2_Protocol_Handler
  then send the RUDP packet to the destination (each time only one packet is to be sended)
*/
bool SOCKET_Transmit_Protocol_Handler::f_SOCKET_Transmit_Protocol_Handler(Message  *msg)
{
	Addr_Str addr_str;
	RUDP rudp;
	unsigned int seq;
	addr_str = activity_list_manager_ptr->f_Find_ip_and_port_by_deviceID(msg->Data[0]);
	seq=sequence_manager_ptr->f_get_sequence(msg->Data[0]);
	rudp = rudp_enunpacket_manager_ptr->f_enRUDPPacket(msg->Data[0],msg->Data[0],'0',sizeof(RUDP)+msg->Length,seq);
//	sequence_manager_ptr->add(msg->Data[0]);
	while(1)
	{
		if(retransmit_timing2_ptr->is_empty())
		{
			retransmit_timing2_ptr->f_SOCKET_Timing2_Add(seq ,msg,addr_str,&rudp);
			sequence_manager_ptr->f_get_sequence_packet(msg->Data[0]);
			break;
		}
	}
//	socket_sr_ptr->create_des_address((char*)&addr_str.ip,addr_str.port);
//	socket_sr_ptr->socket_init();
	socket_sr_ptr->create_des_address("192.168.32.9",6666);
	socket_sr_ptr->app_rudp(rudp,msg->DataPtr, msg->Length);
	socket_sr_ptr->send();
	cout<<"发送包 包类型:"<<rudp.packet_type<<"包序列号:"<<rudp.packet_seq<<endl;
	return 1;
}

⌨️ 快捷键说明

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