Un petit tour sur google vous permet de trouver beaucoup de documentation sur différents protocoles, avec toutes les explications, dans cet exemple je me connecte au protocole MSN puis reçoit au final un ticket de connexion, car lorsque vous vous connectez sur MSN vous vous connectez en premier lieu au serveur principal (Dispatch Server) qui selon l'encombrement du reseau vous renvoit vers un autre serveur (notre ticket de connexion) qui expire rapidement, je posterai plus tard la partie ou je me connecte à ce ticket ce qui vous rendra online, et nous chargerons la contact-list etc...

Je ne peux pas vous poster le swf directement pour des questions de violations de Security SandBox, il faudrait qu'un crossdomain xml soit present sur le serveur microsoft pour autoriser le swf, par contre d'un poste ça tourne impec, voilà le swf à télécharger ici
package {
	
import flash.net.Socket;
import flash.text.TextFormat;
import flash.util.trace;
import flash.events.*;
import flash.display.*;
import flash.events.*


	public class msnConnector extends Sprite
	{
	 
	 private var __sSocket:Socket;
	 private var __tAffiche:TextField;
	 private var __sConnectLog:String;
	 
	 public function msnConnector()
	 
	 {
	 
	 	init();
	 
	 }
	 
	 private function init ():Void 
	 
	 {
	 	
	 	// creation de l'objet socket etc
	 	__sSocket = new Socket();
	 	__tAffiche = new TextField();
	 	__sConnectLog = new String();
	 	
	 	__tAffiche.width = 450;
	 	__tAffiche.wordWrap = true;
	  
	  	__tAffiche.autoSize = TextFieldAutoSize.LEFT;
	  	
	  	// affectation du textFormat
	  	// nouvelle propriété defaultTextFormat
	  	__tAffiche.defaultTextFormat = setFormat();
	  
	  	addChild  ( __tAffiche );
	  	
	  	initEvents();

	 }
	 
	 private function initEvents ():Void
	 
	 {
	 
	 	// souscription des évenements necessaires
	 	// connection, reception de données et cloture de connexion
	 	__sSocket.addEventListener(EventType.CONNECT, onConnect);
	  	__sSocket.addEventListener(ProgressEventType.SOCKET_DATA, socketDataListener);
		__sSocket.addEventListener(EventType.CLOSE, reLog);
		
		// on se connecte au protocole msn
		__sSocket.connect("messenger.hotmail.com",1863);	
	 	
	 }
	
	 // déclenchée lors de la cloture de connexion
	 private function reLog (pEvent:Event):Void 
	 
	 {

			// affiche tout les logs
		 	__tAffiche.text = __sConnectLog;
		 	
		 	// recupération du ticket de connexion
		 	var tmpArray:Array = __sConnectLog.split (" ");
		 	var again:String = tmpArray[12];
		 	var last:Array = again.split (":");
		 	
		 	__tAffiche.htmlText += "Adresse du ticket : " + last[0];
	 	
	 }
	
	// déclenchée lors de la reception de données
	 private function socketDataListener (pEvent:ProgressEvent):Void
	 	
	 {
		
		// on lit les octets reçus grace à la méthode readUTFBytes
		__sConnectLog += __sSocket.readUTFBytes(__sSocket.bytesAvailable);

	 	
	 }
 	
 	// déclenchée lors de la première connexion au serveur
	 public function onConnect(pEvent:Event):Void
	 	
	 {
	 	
	 	// une fois la connexion effectuée
	 	// on dialogue avec le protocole
	 	// en premier : VER command (passage de la version du protocole qui va être utilisée)
	 	__sSocket.writeUTFBytes("VER 1 MSNP8 CVR0\r\n");
	 	// puis : CVR command (langue, passage de la version de windows, la version de msn, etc, puis compte passport)
	    __sSocket.writeUTFBytes("CVR 2 0x0409 win 4.10 i386 MSNMSGR 7.5.0299 MSMSGS coakley@wanadoo.fr\r\n");
	    // puis : USR command ( authentification du compte)
	  	__sSocket.writeUTFBytes("USR 2 TWN I coakley@wanadoo.fr\r\n");
	  	// une fois cette commande passée, le serveur renvoie une réponse XFR contenant le ticket 
	  	// auquel vous devez vous connecter puis clos la connection, l'évenement EventType.CLOSE est déclenché
	 
	 }
	 
	 // renvoie un objet de formatage
	 private function setFormat ():TextFormat
	 
	 {
	 	
	 		var format:TextFormat = new TextFormat();
 			format.font = "Verdana";
 			format.color = 0x000000;
 			format.size = 6;

 			return format;
	
	}
	
	}
	
}