try { // On construit la socket. socket_udp = gcnew System::Net::Sockets::Socket( System::Net::Sockets::AddressFamily::InterNetwork, System::Net::Sockets::SocketType::Dgram, System::Net::Sockets::ProtocolType::Udp); adresse_locale = Net::IPAddress::Parse("127.0.0.1"); port_local = gcnew System::Net::IPEndPoint(adresse_locale, port); _port_distant = gcnew System::Net::IPEndPoint(adresse_locale, port); socket_udp->Bind(port_local); // On alloue le buffer de réception buffer_reception = gcnew array<System::Byte>(10000); while(1) { this->labelVortex->Text="Vortex ouvert"; count = socket_udp->ReceiveFrom(buffer_reception,_port_distant); port_distant = dynamic_cast<System::Net::IPEndPoint^>(_port_distant); // Le buffer de réception contient quelque chose du genre: // 20004\nMon message // Dont il faut extraire, de la suite '2' '0' '0' '0' '4' // la valeur entière 20004. mem_stream = gcnew System::IO::MemoryStream(buffer_reception,0,count); parser = gcnew System::IO::StreamReader(mem_stream); // Lit de l'ascii message = parser->ReadLine(); // Lit "20004\n" et vaut "20004" // Là, on ReadLine a lu tout le stream (???) et // mem_stream->get_Position() retourne la valeur 11 // Pour un message 20004\nHello (qui a 11 caractères). // Donc je dois recalculer la position dans mon stream à la main... port_reponse = System::Int32::Parse(message); pos = message->Length + 1; System::Console::WriteLine( "Port reponse {0}, pos {1}", System::Convert::ToString(port_reponse), System::Convert::ToString(pos)); message = System::Text::Encoding::ASCII->GetString( buffer_reception,pos, count); System::Console::WriteLine("Recu : "); System::Console::Write(" Message : "); System::Console::WriteLine(message); System::Console::WriteLine(" de : {0}",port_distant->Address);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question