Click here to Skip to main content
15,895,142 members
Home / Discussions / Managed C++/CLI
   

Managed C++/CLI

 
GeneralRe: Finding Processes on Ports.. Pin
Mark Salsbery26-Mar-08 5:40
Mark Salsbery26-Mar-08 5:40 
GeneralC++ function to retrieve the address of stack Pin
dharani24-Mar-08 22:57
dharani24-Mar-08 22:57 
GeneralRe: C++ function to retrieve the address of stack Pin
led mike25-Mar-08 5:53
led mike25-Mar-08 5:53 
GeneralSocket File Transfer Pin
javad_200524-Mar-08 20:03
javad_200524-Mar-08 20:03 
GeneralRe: Socket File Transfer Pin
led mike25-Mar-08 5:37
led mike25-Mar-08 5:37 
GeneralRe: Socket File Transfer Pin
Mark Salsbery25-Mar-08 6:11
Mark Salsbery25-Mar-08 6:11 
GeneralRe: Socket File Transfer Pin
led mike25-Mar-08 9:27
led mike25-Mar-08 9:27 
GeneralRe: Socket File Transfer Pin
javad_200526-Mar-08 5:05
javad_200526-Mar-08 5:05 
Server Code:



<br />
enum Command<br />
	{<br />
		NULL,<br />
		Message,<br />
		CreateFile,<br />
		WriteFile,<br />
		Close<br />
	};<br />
<br />
Object ^ RawDeserialize(array<Byte> ^rawdatas, Type ^anytype ) <br />
{ <br />
	int rawsize = Marshal::SizeOf(anytype ); <br />
	if( rawsize > rawdatas->Length ) <br />
		return nullptr; <br />
	IntPtr buffer = Marshal::AllocHGlobal( rawsize ); <br />
	Marshal::Copy( rawdatas, 0, buffer, rawsize ); <br />
	Object ^retobj = Marshal::PtrToStructure( buffer, anytype ); <br />
	Marshal::FreeHGlobal( buffer ); <br />
	return retobj; <br />
} <br />
//////////////////////////<br />
	[StructLayout(LayoutKind::Sequential, Pack=1, CharSet=CharSet::Ansi)] <br />
	ref struct TcpPacket<br />
	{<br />
		[MarshalAs(UnmanagedType::ByValArray,ArraySubType=UnmanagedType::LPWStr,SizeConst=4096)]<br />
		array<Byte>^data; //////////Packet Buffer<br />
		Command cmd; /////Command<br />
		int Length; /////////Data Length<br />
	public:<br />
		TcpPacket()<br />
		{<br />
			cmd=Command::NULL;<br />
			data=gcnew array<Byte>(4096);<br />
		}<br />
	};<br />
	///////////<br />
ref struct ClientInfo<br />
	{<br />
		Socket ^socket;<br />
		array<Byte> ^Buffer;<br />
	};<br />
	///////////<br />
<br />
	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)<br />
			 {<br />
	Socket ^TcpSocket=gcnew Socket(AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp);<br />
	IPEndPoint ^ipEndPoint=gcnew IPEndPoint(IPAddress::Any,5400);<br />
	TcpSocket->Bind(ipEndPoint);<br />
	TcpSocket->Listen(0);<br />
	/////////////////<br />
	TcpSocket->BeginAccept(gcnew AsyncCallback(this,&Form1::OnAccept),TcpSocket);<br />
			 }<br />
<br />
			 void OnAccept(IAsyncResult ^ar)<br />
			 {<br />
				 ClientInfo ^info=gcnew ClientInfo;<br />
				 Socket ^socket=safe_cast<Socket ^>(ar->AsyncState);<br />
				 Socket ^SockAccept=socket->EndAccept(ar);<br />
				TcpPacket ^Packet=gcnew TcpPacket; ////New Packet For Get Packet Size<br />
				int PSize=Marshal::SizeOf(Packet);/////////Get Packet Size<br />
<br />
				 info->socket=SockAccept;<br />
				info->Buffer=gcnew array<Byte>(PSize);<br />
				SockAccept->BeginReceive(info->Buffer,0,PSize,SocketFlags::None,gcnew AsyncCallback(this,&Form1::OnReceive),info);<br />
			 }<br />
			 void OnReceive(IAsyncResult ^ar)<br />
			 {<br />
				 ClientInfo ^info=safe_cast<ClientInfo ^>(ar->AsyncState);<br />
				 info->socket->EndReceive(ar);<br />
<br />
				 ///Deserialize Buffer<br />
				  TcpPacket ^Packet=gcnew TcpPacket; <br />
				 Type ^typeTcpPacket=Type::GetType(String::Format("{0}",Packet));<br />
				Packet=(TcpPacket ^)RawDeserialize( info->Buffer,typeTcpPacket);<br />
				///////////////////////////<br />
				ReleasePacket(Packet);<br />
				int PSize=Marshal::SizeOf(Packet);<br />
				info->Buffer=gcnew array<Byte>(PSize);<br />
			 	 info->socket->BeginReceive(info->Buffer,0,PSize,SocketFlags::None,gcnew AsyncCallback(this,&Form1::OnReceive),info);<br />
			 }<br />
			 FileStream ^file;<br />
			 void ReleasePacket(TcpPacket ^Packet)<br />
			 {<br />
				 switch(Packet->cmd)<br />
				 {<br />
				 case Command::CreateFile:<br />
					 {<br />
						 file=gcnew FileStream("c:\\2.jpg",FileMode::Create);<br />
						 break;<br />
					 }<br />
				 case Command::WriteFile:<br />
					 {<br />
						 file->Write(Packet->data,0,Packet->Length);<br />
						 break;<br />
					 }<br />
				 case Command::Close:<br />
					 {<br />
						 file->Close();<br />
						 MessageBox::Show("File Complete");<br />
						 break;<br />
					 }<br />
<br />
				 }<br />
			 }<br />
<br />

Client Source
<br />
		array<Byte> ^ Serialize(Object ^Struct)<br />
{<br />
<br />
	int len=Marshal::SizeOf(Struct);<br />
	IntPtr ptr=Marshal::AllocHGlobal(len);<br />
	array<Byte>^ rawdatas = gcnew array<Byte>(len);<br />
	Marshal::StructureToPtr(Struct,ptr,false);<br />
	Marshal::Copy( ptr, rawdatas, 0, len ); <br />
	Marshal::FreeHGlobal( ptr ); <br />
	//////////////////////////////////////////////////////////////////	<br />
	return rawdatas; <br />
}<br />
		///////////////////////<br />
	///////////////////<br />
	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)<br />
			 {<br />
 Socket ^TcpSocket=gcnew Socket(AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp);<br />
 TcpSocket->BeginConnect(gcnew IPEndPoint(IPAddress::Parse("127.0.0.1"),5400),<br />
gcnew AsyncCallback(this,&Form1::OnConnect),TcpSocket);<br />
			 }<br />
			 void OnConnect(IAsyncResult ^ar)<br />
			 {<br />
				  Socket ^socket=safe_cast<Socket ^>(ar->AsyncState);<br />
				  socket->EndConnect(ar);<br />
				 ///////////////////////////Send File<br />
				  FileStream ^file=gcnew FileStream("c:\\1.jpg",FileMode::Open);<br />
				  //////////////////////////<br />
				  TcpPacket ^Packet=gcnew TcpPacket;			  <br />
				  array<Byte>^ Data=gcnew array<Byte>(Marshal::SizeOf(Packet));<br />
				  Packet->cmd=Command::CreateFile;	 <br />
				  Data=Serialize(Packet);<br />
				  socket->Send(Data,Data->Length,SocketFlags::None);<br />
				  /////////////////////<br />
				  int len;<br />
				  do<br />
				  {<br />
					  Packet->cmd=Command::WriteFile;<br />
					  len=file->Read(Packet->data,0,4096);<br />
					  Packet->Length=len;<br />
					   Data=Serialize(Packet);<br />
				  socket->Send(Data,Data->Length,SocketFlags::None);<br />
				  }while(len>0);<br />
<br />
				  Packet->cmd=Command::Close;<br />
					   Data=Serialize(Packet);<br />
				  socket->Send(Data,Data->Length,SocketFlags::None);<br />
			 }<br />
<br />

QuestionCollapsible PropertyGrid in bold. Pin
TheBerk24-Mar-08 11:27
TheBerk24-Mar-08 11:27 
GeneralRe: Collapsible PropertyGrid in bold. Pin
led mike25-Mar-08 9:41
led mike25-Mar-08 9:41 
GeneralRe: Collapsible PropertyGrid in bold. Pin
TheBerk25-Mar-08 10:51
TheBerk25-Mar-08 10:51 
GeneralRe: Collapsible PropertyGrid in bold. Pin
led mike25-Mar-08 11:50
led mike25-Mar-08 11:50 
GeneralRe: Collapsible PropertyGrid in bold. Pin
TheBerk26-Mar-08 4:14
TheBerk26-Mar-08 4:14 
GeneralRe: Collapsible PropertyGrid in bold. Pin
TheBerk26-Mar-08 11:40
TheBerk26-Mar-08 11:40 
GeneralHelp with task in Microsoft Visual C++ express edition Pin
jackey_chan24-Mar-08 7:53
jackey_chan24-Mar-08 7:53 
GeneralRe: Help with task in Microsoft Visual C++ express edition Pin
Christian Graus24-Mar-08 11:21
protectorChristian Graus24-Mar-08 11:21 
GeneralRe: Help with task in Microsoft Visual C++ express edition Pin
jackey_chan25-Mar-08 7:29
jackey_chan25-Mar-08 7:29 
GeneralRe: Help with task in Microsoft Visual C++ express edition Pin
Christian Graus25-Mar-08 10:05
protectorChristian Graus25-Mar-08 10:05 
GeneralRe: Help with task in Microsoft Visual C++ express edition Pin
jackey_chan26-Mar-08 0:27
jackey_chan26-Mar-08 0:27 
Questionglobal managed string array Pin
ptr2void24-Mar-08 1:54
ptr2void24-Mar-08 1:54 
GeneralRe: global managed string array Pin
led mike24-Mar-08 4:44
led mike24-Mar-08 4:44 
GeneralRe: global managed string array Pin
Mark Salsbery24-Mar-08 6:31
Mark Salsbery24-Mar-08 6:31 
GeneralRe: global managed string array Pin
led mike24-Mar-08 7:05
led mike24-Mar-08 7:05 
GeneralRe: global managed string array Pin
Mark Salsbery24-Mar-08 7:10
Mark Salsbery24-Mar-08 7:10 
GeneralRe: global managed string array Pin
led mike24-Mar-08 7:15
led mike24-Mar-08 7:15 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.