Es dificil ser mas explicito porque tu consulta original es bastante amplia, y tiene muchos puntos para ver.
A ver, dejame probar:
Desde FlashPlayer10 tenes un nuevo protocolo para NetConnection "rtmfp", que te permite una comunicación asincronica entre clientes usando p2p.
Aca tenes una
http://www.slideshare.net/peterelst/p2p-on-the-local-network escribió:
presentación
de Peter Elst de como hicieron
https://code.google.com/p/cocoon-p2p/wiki/PureAS3 escribió:
Cocoon
, eso te va a ayudar a entender como funciona.
Particularmente la clase que uso yo es
http://blog.andrewwalpole.com/2013/02/27/introducing-netgrouper-for-easy-real-time-rtmfp-p2p-connections-between-swfs/ escribió:
NetGrouper
, es muy simple y me ha resultado muy práctica.
En tu caso seria asi:
Código ActionScript :
// SERVER
netgrouper = new NetGrouper();
netgrouper.addEventListener(NetGrouperEvent.CONNECT, onConnected);
netgrouper.addEventListener(NetGrouperEvent.RECEIVE, onReceivePost);
netgrouper.addEventListener(NetGrouperEvent.NEIGHBOR_CONNECT, onNeighborConnected);
netgrouper.addEventListener(NetGrouperEvent.NEIGHBOR_DISCONNECT, onNeighborDisconnected);
// connecta
netgrouper.connect(NetGrouper.LOCAL_CONNECTION, 'grupo/casa');
private function onNeighborConnected(event:NetGrouperEvent):void {
trace('p2p neighbour connected', netgrouper.getPeerId(event));
var postObj:Object = {} ;
postObj.timestamp = new Date().getTime();
postObj.ip = getMyIP();
netgrouper.post(postObj);
}
private function onReceivePost(event:NetGrouperEvent):void {
trace( 'P2P post received:', event.message.ip, ' from client:',netgrouper.getPeerId(event));
}
// utilitario para devolver la IP de este client.
public static function getMyIP():String {
var netInterfaces:Vector.<NetworkInterface> = NetworkInfo.networkInfo.findInterfaces();
var loopCheck:RegExp = /^127/; //anything beginning with 127 is the loopback interface, skip it
var goodIP:RegExp = /(\d+)\.(\d+)\.(\d+)\.(\d+)/;
if (netInterfaces && netInterfaces.length > 0) {
for each (var i:NetworkInterface in netInterfaces) {
if (i.active) {
var addresses:Vector.<InterfaceAddress> =i.addresses;
if(addresses){
for each (var j:InterfaceAddress in addresses) {
// trace( "[NetUtils] Host IP address: " + j.address );
if(!loopCheck.test(j.address) && goodIP.test(j.address)){
trace( "[NetUtils] Host IP address: " + j.address );
return j.address ;
}
}
}
}
}
}
return null ;
}
Entonces... para enviar usas netgrouper.post(postObj), y para recibir usas el callback NetGrouperEvent.RECEIVE...
Las maquinas asi van a notificar su IP, despues podes como comandos atraves de ::pos() para hacer requests de datos....
Código ActionScript :
var requestObj:Object = {action:"getFileList", folder: null }; // null = seria el primer request.
netgrouper.post( requestObj )
// la otra maquina parsea el comando:
if(event.message.action == "getFileList"){
var rootFolder:String = event.message.folder ;
var file:File ;
if( !rootFolder ){
file = File.desktopDirectory ;
} else {
file = new File( rootFolder );
}
var fileList:Array = file.getDirectoryListing() ;
netgrouper.post( {action:"resultGetFileList", data: fileList );
}
La verdad estoy improvisando el codigo para que veas, este editor de Cristalab es un desastre para escribir codigo
Pero supongo que te das una idea clara del tema.
Eso es para la comunicacion.... ahora para "compartir" archivos es mas complicado.
http://tomkrcha.com/?p=1646 escribió:
Mira este post del maestro TomKrcha
Yo particularmente he usado un
http://www.freeutils.net/source/jlhttp/ escribió:
webserver Java
, es bien livianito (39kb). Ejecutandolo con NativeProcess (eso si, asegurate de tener los puertos abiertos en las maquinas).
De esa forma, solo usas P2P para hacer un request de la IP, y despues te manejas con el webserver para cargar las cosas, que va a ser mucho mas fácil, pero quizas menos flexbile, ya que los archivos que quieras visualizar van a tener que estar dentro de la carpeta www que definas para el servidor web.
Jaja, te dije que era un tópico medio avanzado. En fin, si necesitas ayuda ESPECIFICA con algo, chifla.