TinyP2P
글쓴이: 꼬마앙마 / 작성시간: 수, 2004/12/22 - 5:35오후
세계에서 가장 적은 코드를 사용한 P2P라고 합니다.
Python버전
# tinyp2p.py 1.0 (documentation at http://freedom-to-tinker.com/tinyp2p.html) import sys, os, SimpleXMLRPCServer, xmlrpclib, re, hmac # (C) 2004, E.W. Felten ar,pw,res = (sys.argv,lambda u:hmac.new(sys.argv[1],u).hexdigest(),re.search) pxy,xs = (xmlrpclib.ServerProxy,SimpleXMLRPCServer.SimpleXMLRPCServer) def ls(p=""):return filter(lambda n:(p=="")or res(p,n),os.listdir(os.getcwd())) if ar[2]!="client": # license: http://creativecommons.org/licenses/by-nc-sa/2.0 myU,prs,srv = ("http://"+ar[3]+":"+ar[4], ar[5:],lambda x:x.serve_forever()) def pr(x=[]): return ([(y in prs) or prs.append(y) for y in x] or 1) and prs def c(n): return ((lambda f: (f.read(), f.close()))(file(n)))[0] f=lambda p,n,a:(p==pw(myU))and(((n==0)and pr(a))or((n==1)and [ls(a)])or c(a)) def aug(u): return ((u==myU) and pr()) or pr(pxy(u).f(pw(u),0,pr([myU]))) pr() and [aug(s) for s in aug(pr()[0])] (lambda sv:sv.register_function(f,"f") or srv(sv))(xs((ar[3],int(ar[4])))) for url in pxy(ar[3]).f(pw(ar[3]),0,[]): for fn in filter(lambda n:not n in ls(), (pxy(url).f(pw(url),1,ar[4]))[0]): (lambda fi:fi.write(pxy(url).f(pw(url),2,fn)) or fi.close())(file(fn,"wc"))
Perl
$/=$_;$, =shift;$w=$a=shift;sub g{open(F, '<',$4) &&t($2, $a ,"e$4",<F>) ;close F}$k{+shift}=1;socket S, 2,1,6;bind S, &a;sub e{open F, '>', $4;print F $';close F}sub h{t($2,$_, id) for keys%k}sub i{$k{$2}=1}sub f{t($_,$2,$4) for keys%k}sub a{$w=~/:/;pack 'CxnC4x8 ', 2,$', split '\. ',$`}for(listen S, 5;$SIG{ALRM}=sub{};m! ^(. *? ) (. *? ) ([e-i]) ([^/]*)/! s&&$ , eq$1&&&$3){alarm 9;(accept(C, S) , alarm 0)? read C,$_, 1e6:($_="$, $a f". shift) ;close C}sub t{socket X, 2,1,6;$w=shift;$k{$w}=(connect X, &a)? print X"$, $_[0] $_[1]/". pop:$/;close X}
ruby
#! /usr/bin/ruby # Server: ruby p2p.rb password server server-uri merge-servers # Sample: ruby p2p.rb foobar server druby://localhost:1337 druby://foo.bar:1337 # Client: ruby p2p.rb password client server-uri download-pattern # Sample: ruby p2p.rb foobar client druby://localhost:1337 *. rb require 'drb ';F , D, P, M, U, *O=File , Dir , *ARGV;def s(p) F.basename p[/\w. */]end;def c u DRbObject.new(() , u) end;def x(u);[P, u]. hash;end;M["c"]? c(U). f(x(U) ). map{|n|p=x(n) c=c(n);(c.f(p, O[0], 0). map{|f|s f}-D["*"]). map{|f|open(f,"w")<<c.f(p,f,1)}}:(DRb. start_service U,Class.new{def p(z=O)O.push(*z).uniq!;O;end;new.methods.map{|m|m[ /_[_t]/]||private(m)};def f(c,a=[],t=2)c==x(U)&&(t==0?D[s(a)]:t==1?F.read(s(a)): p(a))end;def y;(p(U)+p).map{|u|c(u).f(x(u),p(U))rescue()};self;end}.new.y;sleep)
Forums:
줄 많고 알아보기 편한 것이 더 좋겠네요.자기만 알아 볼 수 있으
줄 많고 알아보기 편한 것이 더 좋겠네요.
자기만 알아 볼 수 있으니 대략 무효
우앙
우앙
----------------------------
May the F/OSS be with you..
펄도 6라인 버전이 나왔습니다.http://ansuz.sooke.bc
펄도 6라인 버전이 나왔습니다.
http://ansuz.sooke.bc.ca/software/molester/index.php
파이썬이나 루비가 사용한 것은, 비록 표준라이브러리로 배포되긴 하지만, 라이브러리라기보단 어플리케이션에 가까운 반면, 펄은 socket 라이브러리만 사용했다는 점을 주의해서 봐야 할 것 같습니다.
----
http://nohmad.tumblr.com/
이거 꼭 누가 짠 뭐 같군요. -_-;흐음..
이거 꼭 누가 짠 뭐 같군요. -_-;
흐음..
그래도 소스에...
저작권 표시는 꼭 되어 있네요. :)
소스에 저작권 표시라... 정말 재밌네요. :D