Python论坛  - 讨论区

标题:[python-chinese] Re: Python P2P design

2005年04月07日 星期四 09:45

Zoom Quiet zoom.quiet at gmail.com
Thu Apr 7 09:45:59 HKT 2005

=E0=C0=E0=C0=A3=AC=C4=E3=B5=C4=D3=CA=BC=FE=CE=D2=D4=DAGmail =D6=D0=CA=C7=BC=
=D3=D0=C7=D7=A2=C3=F7=B5=C4=A3=A1
=CA=C7=B7=C7=B3=A3=BA=C3=B5=C4=D3=A6=D3=C3=CF=EE=C4=BF=C4=D8=A3=AC=B6=BC=BC=
=C6=BB=AE=A3=AC=C0=FB=D3=C3=C4=E3=B5=C4=B4=FA=C2=EB=D7=CA=D4=B4=C1=CB=A3=A1
=CF=D6=D4=DA=BF=B4=C0=B4=A3=AC=C4=E3=B5=C4 p2p =CA=C7=C3=BB=D3=D0=C0=ED=BD=
=E2=C7=E5=B3=FE=CB=BC=C2=B7=A3=BF=A3=A1

=CB=F9=CE=BD P2P ,=D4=DA=CE=D2=BF=B4=C0=B4=A3=AC=CA=C7 People to People
=C4=C7=CE=B4=A3=AC=D5=E2=C0=EF=BE=CD=B2=BB=D3=A6=B8=C3=CB=B5=D3=D0 Center S=
erve =B5=C4=B6=AB=CE=F7=CA=C7=D2=B2=BA=F5=A3=BF=A3=A1
=E0=C0=E0=C0=A3=AC=B2=BB=B9=FD=A3=AC=D2=AA=BD=F8=D0=D0=BF=EC=CB=D9=B5=C4=CB=
=D1=CB=F7=A3=AC=B2=E9=D1=AF=A3=AC=CD=B3=D2=BB=C8=CF=D6=A4=A3=AC=BB=B9=CA=C7=
=D2=AA=D3=D0=B8=F6"=D6=D0=D0=C4=B7=FE=CE=F1"=BB=FA=D6=C6=B5=C4

=BC=B4=A3=AC=C4=E3=CB=B5=B5=C4=D7=A2=B2=E1=A3=AC=B7=B4=D7=A2=B2=E1=A3=AC=BD=
=F6=BD=F6=D3=A6=B8=C3=CB=B5=CA=C7=BC=D3=C8=EB"P2P=D2=F4=C0=D6=B7=D6=CF=ED"=
=B5=C4=C9=F9=C3=F7=A3=A1
=B4=D3=D6=D0=D0=C4=B7=FE=CE=F1=C6=F7=D6=D0=BB=F1=B5=C3=CE=A8=D2=BB=B5=C4=B1=
=EA=CA=B6=A3=AC=D2=D4=B1=E3=C6=E4=CB=FC=C8=CB=BF=C9=D2=D4=D6=AA=B5=C0=C4=E3=
=BB=FA=C6=F7=B5=C4=B5=D8=D6=B7=A3=AC
=B6=F8=CA=B5=BC=CA=BD=F8=D0=D0=D2=F4=C0=D6=B7=D6=CF=ED=CA=B1=A3=AC=B6=BC=CA=
=C7=B5=BD=B6=D4=D3=A6=B5=C4=C3=BF=B8=F6=C8=CB=B5=C4=BB=FA=C6=F7=D7=C5=BD=F8=
=D0=D0=B5=C4=A3=BB
=CB=F9=D2=D4=A3=AC=C4=E3=CB=F9=CE=BD=B5=C4 Client ,=C6=E4=CA=B5=B2=C5=CA=C7=
=D5=E6=D5=FD=CC=E1=B9=A9=B7=D6=CF=ED=B7=FE=CE=F1=B5=C4=B7=FE=CE=F1=C6=F7=A3=
=A1

=C4=C7=CE=B4=A3=AC=C4=E3=D2=AA=CF=EB=CD=A8=B5=C4=CA=C7:
1. =B8=F6=C8=CB=BB=FA=C6=F7=C8=E7=BA=CE=BF=C9=D2=D4=B7=D6=CF=ED=CE=C4=BC=FE=
=B8=F8=C6=E4=CB=FC=C8=CB=A3=BF
2. =B8=F6=C8=CB=BB=FA=C6=F7=C9=CF=B5=C4=D7=CA=D4=B4=C8=E7=BA=CE=BF=C9=D2=D4=
=C1=EE=CB=F9=D3=D0=C8=CB=BF=C9=D2=D4=B2=E9=D1=AF=B5=BD?
3. =C8=E7=BA=CE=B1=A3=D6=A4=B8=F6=C8=CB=BB=FA=C6=F7=C9=CF=B5=C4=CE=C4=BC=FE=
=B7=D6=CF=ED=CA=C7=B0=B2=C8=AB=B5=C4=BF=C9=D0=C5=C8=CE=B5=C4?

OK!=CD=EA=C8=AB=BF=C9=D2=D4=BD=E8=BC=F8Bt =B5=C4=CB=BC=C2=B7=CA=C7=D2=B2=BA=
=F5?!
=D6=C1=D3=DA=D3=D0=B7=F1GUI ,=CD=EA=C8=AB=B2=BB=D3=C3=B5=A3=D0=C4,=D6=BB=D2=
=AA=C9=E8=BC=C6=BA=CF=C0=ED,=D3=D0=D7=E3=B9=BB=BA=C3=B5=C4API =CC=E1=B9=A9,=
GUI =B2=BB=B9=FD=CA=C7=C4=A9=BD=DA,
=CE=D2=B5=C4=BD=A8=D2=E9=CA=C7:
1. =CB=F9=CE=BD=B7=FE=CE=F1=C6=F7,=BD=F6=BD=F6=CA=C7=B7=A2=B7=C5Peer =D6=A4=
=CA=E9=B5=C4=B5=D8=B7=BD,=C1=ED=CD=E2=D2=AA=B8=BA=D4=F0=C3=BF=B8=F6Peer =C9=
=CF=D7=CA=D4=B4=C1=D0=B1=ED=B5=C4=BB=E3=BC=AF,=B8=FC=D0=C2,=CC=E1=B9=A9=CB=
=D1=CB=F7;
2. =CB=F9=CE=BD Client =D3=A6=B8=C3=CB=B5=CA=C7=B8=F6=C6=BD=CC=A8=CE=DE=B9=
=D8=B5=C4Http =B7=FE=CE=F1=CA=D8=BB=A4,=86=94=86=94=86=94!=B1=C8=C8=E7=CB=
=B5=C0=FB=D3=C3 CherryPy
=B5=C8=B5=C8=C7=E1=C7=C9=B5=C4Web=D3=A6=D3=C3=C6=BD=CC=A8,=C6=F4=B6=AF=D2=
=BB=B8=F6=BF=C9=D2=D4=CE=AA=CD=E2=B2=BF=B7=C3=CE=CA=B5=C4Web=D5=BE=B5=E3,=
=C0=B4=CC=E1=B9=A9=CF=C2=D4=D8;

=D5=E2=D1=F9=D2=BB=C0=B4,=B4=F3=BC=D2=BF=C9=D2=D4=D4=DA"Client"=B5=C4=D5=BE=
=B5=E3=D6=D0=B9=DC=C0=ED=D7=D4=B8=F6=B6=F9=BB=FA=C6=F7=D6=D0=B9=B2=CF=ED=B5=
=C4=D7=CA=D4=B4,=CD=AC=CA=B1=BF=C9=D2=D4=BD=F8=D0=D0=CB=D1=CB=F7=CB=F9=D3=
=D0=B7=D6=CF=ED=C1=D0=B1=ED=D6=D0=B5=C4=CE=C4=BC=FE,=BD=F8=D0=D0=CF=C2=D4=
=D8,=B6=F8=CF=C2=D4=D8=B5=C4=BB=EE=B6=AF=CD=EA=C8=AB=BF=C9=D2=D4=CA=B9=D3=
=C3=B1=EA=D7=BC=B5=C4=C6=E4=CB=FC=D7=A8=D3=C3=CF=C2=D4=D8=B9=A4=BE=DF,=CA=
=C7=D2=B2=BA=F5?!

(=D2=FE=BA=AC=B5=C4=B2=D9=D7=F7=CA=C7 "Client" =BD=C5=B1=BE=B5=BD "Server"=
=D5=BE=B5=E3=D6=D0=BD=F8=D0=D0=CB=D1=CB=F7,=D7=E9=D6=AF=CE=AA=D6=B8=CF=F2=
=B8=F7=B8=F6=BB=FA=C6=F7=B5=D8=D6=B7=B5=C4=CF=C2=D4=D8=C1=B4=BD=D3!)

=D2=D4=C9=CF,=B2=BB=D6=AA=B5=C0=CA=C7=B7=F1=CB=B5=C7=E5=B3=FE=C1=CB

On Apr 7, 2005 5:34 AM, wangchao <iwillipo at gmail.com> wrote:
> =20
> Hi Zoom,=20
>  =20
>  =20
> =CD=FC=BC=C7=CA=B2=C3=B4=CA=B1=BA=F2=BC=D3=B5=C3=C1=CB=A3=AC=B5=AB=C4=E3=
=D2=BB=D6=B1=D4=DA=CE=D2=B5=C4MSN=BA=C3=D3=D1=C0=EF=A3=AC=B2=BB=B9=FD=B2=BB=
=D6=AA=B5=C0=CE=D2=CA=C7=B7=F1=D4=DA=C4=E3=B5=C4=BA=C3=D3=D1=C0=EF=A3=AC=CE=
=D2=B5=C4MSN=C3=FB=D7=D6=CA=C7Chao=20
> =CE=D2=BE=CD=CA=C7=C7=B0=BC=B8=CC=EC=D4=DAPython-Cn=B5=C3maillist=C0=EF=
=B7=A2=C4=C7=B8=F6P2P=CF=EE=C4=BF=C7=F3=D6=FA=B5=C4=BC=D2=BB=EF=A1=A3
> =A3=BA=A3=A9=BA=F3=C0=B4=CA=D6=CD=B7=C9=CF=D3=D6=D4=DC=C1=CB=D0=A9=C6=E4=
=CB=FB=B5=C4=CA=C2=A3=AC=BE=CD=CF=C8=B0=D1=C4=C7=B8=F6=B7=C5=D2=BB=B7=C5=C1=
=CB=A1=A3=CF=D6=D4=DA=D3=D6=D2=AA=BF=AA=CA=BC=D7=F6=C4=C4=B8=F6=C1=CB=A3=AC=
=B6=F8=C7=D2=CA=B1=BC=E4=CD=A6=BD=F4=B5=C4=A3=AC=D6=BB=D3=D0=C8=FD=CB=C4=CC=
=EC=C1=CB=A1=A3=20
>  =20
> =CE=D2=D4=DA=B0=D1=B5=B1=CA=B1Pythoncn=C9=CF=B5=C4=B6=AB=CE=F7copy&paste;=
=D2=BB=CF=C2=20
>  =20
> P2P=B9=B2=CF=ED=D2=F4=C0=D6=BF=CD=BB=A7=B6=CB=CF=EE=C4=BF
>=20
> =BF=CD=BB=A7=B6=CB=B9=A6=C4=DC=D2=AA=C7=F3=A3=BA
> =D4=DA=D2=D1=BE=AD=CC=E1=B9=A9=B5=C4Address Server=C9=CF=D7=A2=B2=E1=D3=
=EB=D7=A2=CF=FA
> =CD=A8=B9=FDAddress Server=B2=E9=D1=AF=C6=E4=CB=FB=D4=DA=CF=DF=B5=C4Peers
> =B7=A2=CB=CD=B2=E9=D1=AF=C7=EB=C7=F3=B5=BD=C6=E4=CB=FBPeers
> =CF=EC=D3=A6=C6=E4=CB=FBPeers=B5=C3=B2=E9=D1=AF=C7=EB=C7=F3
> =B4=D3=C6=E4=CB=FBPeers=C9=CF=C7=EB=C7=F3=CE=C4=BC=FE=CF=C2=D4=D8
> =CF=EC=D3=A6=C6=E4=CB=FBPeers=B5=C3=CE=C4=BC=FE=CF=C2=D4=D8=C7=EB=C7=F3
>=20
> =D3=C3=E4=AF=C0=C0=C6=F7=D7=F7=CE=AA=D3=EB=D3=C3=BB=A7=BD=BB=C1=F7=B5=C4=
=BD=E7=C3=E6
>=20
> =C4=BF=C7=B0Address Server=D2=D1=BE=AD=CC=E1=B9=A9=C1=CB
>=20
> =CD=A8=B9=FD=D5=E2=D1=F9=B5=C4URI=BF=C9=D2=D4=CA=B5=CF=D6=D4=DAAddress Se=
rver=C9=CF=D7=A2=B2=E1
>=20
> http://Server/peerdb.cgi?requestType=3Dregister&name;=3Dusername&address;=
=3Dip=B5=D8=D6=B7:=B6=CB=BF=DA=BA=C5
>=20
> =D7=A2=B2=E1=B3=C9=B9=A6=BA=F3=A3=AC=B5=C3=B5=BD=C8=E7=CF=C2XML=BB=D8=B8=
=B4
> 
>  RegisterReply
>  true
>  Tue 8 Mar, 2005 11:01:02 
>  
>=20
> =CD=A8=B9=FDhttp://Server/~brooks/682/peerdb.cgi?requestType=3Dunregister=
&name;=3D
> =BF=C9=D2=D4=D4=DAAddress Server=C0=EF=D7=A2=CF=FA
>=20
> Address Server=BB=B9=D6=A7=B3=D6=D5=E2=D1=F9=B5=C4=B2=D9=D7=F7
> http://server/peerdb.cgi?requestType=3DfindAllPeers
> =BF=C9=D2=D4=B2=E9=D1=AF=B5=BD=CB=F9=D3=D0=D4=DA=CF=DF=B5=C4Peers
>=20
> =B5=C3=B5=BD=C8=E7=CF=C2XML=BB=D8=B8=B4
> 
>  UserListReply
>  true
>  Tue 8 Mar, 2005 11:01:02
> 
>  
>     liudehua 
>    
192.3.55.6:8000
> > > zhangxueyou >
133.66.197.2:8000
> > > guofucheng >
132.6.55.1:8000
> > > >=20 > =B5=B1=D3=C3=BB=A7=CF=EB=B2=E9=D1=AF=B8=E8=C7=FA=B5=C4=CA=B1=BA=F2 > =B7=A2=CB=CD=C8=E7=CF=C2=C7=EB=C7=F3=B8=F8=CB=F9=D3=D0=D4=DA=CF=DF=B5=C4P= eers > http://otherpeers:port?requestType=3Dsearch&field;=3Dartist&keyword;=3Dzhou= jielun >=20 > Peers=BD=D3=B5=BD=D5=E2=D1=F9=B5=C4=C7=EB=C7=F3=BA=F3=A3=AC=D2=AA=B4=D3= =D7=D4=BC=BA=B5=C4XML=CA=FD=BE=DD=BF=E2=C0=EF=B2=E9=D1=AF=CA=C7=B7=F1=D3=D0= =B7=FB=BA=CF=CC=F5=BC=FE=B5=C4=B8=E8=C7=FA=A3=AC=B2=A2=B8=F8=D3=EB=CF=C2=C3= =E6=B8=F1=CA=BD=B5=C4XML=BB=D8=B8=B4=A1=A3 >=20 > =B4=CBXML=CA=FD=BE=DD=BF=E2=B2=BB=D2=AA=C7=F3=C4=DC=CD=A8=B9=FDClient=B8= =FC=D0=C2=A3=AC=D2=B2=BE=CD=CA=C7=CB=B5=D4=DA=D2=BB=BF=AA=CA=BC=BD=A8=BA=C3= =D2=BB=B8=F6=D5=E2=D1=F9=B5=C4=CA=FD=BE=DD=BF=E2=A3=AC=B7=C5=C9=CF=BC=B8=B8= =F6=B8=E8=BE=CDOK=C1=CB=A3=AC=B8=F1=CA=BD=D2=B2=B2=BB=D3=C3=B8=FA=CF=C2=C3= =E6=B5=C4XML=D2=BB=D6=C2=A3=AC=B5=BD=CA=B1=BA=F2=CD=A8=B9=FDXSLT=D7=AA=BB= =BB=D2=BB=CF=C2=BE=CDOK >=20 > > SearchReply > true > Tue 8 Mar, 2005 11:01:02 > > > > Police Truck > Dead Kennedys > Give Me Convenience Or Give Me Death > Punk > http://111.111.111.111:8080/123.mp3> > 16433776 > Mon 7 Mar, 2005 11:01:02 > dfsdfsdfsfdfsddfs > > ... > > > >=20 > =B7=A2=B3=F6=B2=E9=D1=AF=C7=EB=C7=F3=B5=C4Peers=B0=D1=B5=C3=B5=BD=B5=C4XM= L=B7=AD=D2=EB=B3=F6=C0=B4=B8=F8=D3=C3=BB=A7=D4=C4=B6=C1=A3=AC=D3=C3=BB=A7= =D1=A1=D4=F1=CF=C2=D4=D8=C4=C4=CA=D7=B8=E8=C7=FA >=20 > =D3=C3=BB=A7=BE=F6=B6=A8=CF=C2=D4=D8=BA=F3=A3=ACPeer=B8=F9=BE=DD=C9=CF=C3= =E6XML=C0=EF=B5=C4URL=A3=AC=B7=A2=B3=F6HTTP GET=C7=EB=C7=F3=A1=A3=D4=B6=B7= =BDPeer=CF=EC=D3=A6=B4=CB=C7=EB=C7=F3=A3=AC=B0=D1=CE=C4=BC=FE=B4=AB=B9=FD= =C8=A5=A1=A3 >=20 > =BB=F9=B1=BE=B5=C4=B9=A6=C4=DC=D2=AA=C7=F3=BE=CD=CA=C7=D5=E2=D1=F9=C1=CB= =A1=A3 > =D2=F2=CE=AA=D6=BB=CA=C7=B8=F6=BD=CC=D1=A7=C4=BF=B5=C4=B5=C4=CF=EE=C4=BF= =A3=AC=CB=F9=D2=D4=D5=E2=C0=EF=B2=BB=BF=BC=C2=C7Peers=BA=DC=B6=E0=B5=C4=C7= =E9=BF=F6=A3=AC=D4=DA=D5=E2=D2=BB=BC=D9=C9=E8=CF=C2=A3=AC=B7=A2=CB=CD=B2=E9= =D1=AF=C7=EB=C7=F3=B5=BD=C3=BF=B8=F6Peers=CA=C7=BF=C9=D0=D0=B5=C4 >=20 > =C1=ED=CD=E2=A3=AC=D5=E2=C0=EF=B2=BB=BF=BC=C2=C7=D2=F2=CE=AA=B7=C0=BB=F0= =C7=BD=A3=AC=C4=DA=CD=F8=CE=DE=D3=B3=C9=E4=B5=C8=D4=AD=D2=F2=D4=EC=B3=C9=B5= =C4http=C7=EB=C7=F3=CE=DE=B7=A8=B5=BD=B4=EF=D4=B6=B7=BDPeers=B5=C4=C7=E9=BF= =F6=A1=A3 >=20 > =B0=B4=D5=D5=D5=E2=D1=F9=D2=BB=B8=F6=C4=A3=D0=CD=A3=AC=CE=D2=B5=C4Client= =C6=F4=B6=AF=B5=C4=CD=AC=CA=B1=A3=AC=D2=B2=D2=AA=D4=DA=BA=F3=CC=A8=C6=F4=B6= =AF=D2=BB=B8=F6Web service=A3=AC=D5=E2=B8=F6Service=B2=BB=B5=AB=D2=AA=C4=DC= =CF=EC=D3=A6=C6=D5=CD=A8=B5=C4HTTP > GET=C7=EB=C7=F3=A3=AC=BB=B9=B5=C3=C4=DC=CF=EC=D3=A6REST=C7=EB=C7=F3=A3=AC= =D4=DA=CD=F8=C9=CF=B2=E9=C1=CB=BA=DC=BE=C3=A3=AC=B6=BC=D5=D2=B2=BB=B5=BD=CF= =EC=D3=A6REST=B5=C3=D3=D0=B9=D8=B6=AB=B6=AB=A1=A3Python=D3=D0=B9=D8Web > Service=B5=C3=B6=AB=B6=AB(BaseHTTPServer,CGIHTTPServer,CGIRequestHandler)= =CB=C6=BA=F5=D2=B2=C3=BB=D3=D0=CE=C4=B5=B5=D6=A7=B3=D6 >=20 > Service=C8=E7=B9=FB=B8=E3=B3=F6=C0=B4=A3=AC=C6=F4=B6=AF=C1=CB=D3=C0=D4=B6= =BC=E0=CC=FD=BE=CD=BA=C3=C1=CB=A3=AC=B5=AB=CA=C7Client=CB=C6=BA=F5=D3=D0=B5= =E3=C2=E9=B7=B3=A3=AC=D2=F2=CE=AA=C3=BB=D3=D0GUI=A3=AC=CD=A8=B9=FD=E4=AF=C0= =C0=C6=F7=BD=F8=D0=D0=B2=D9=D7=F7=B5=C4=BB=B0=A3=AC=CE=D2=D4=F5=C3=B4=CA=B5= =CF=D6=C6=F4=B6=AF=B0=A2=A3=BF=D3=C3=D2=BB=B8=F6Python=D0=B4=B5=C4cgi=BD=C5= =B1=BE=A3=BF=C4=C7=D1=F9=B5=C4=BB=B0=CE=D2=B5=C4Webservice=CA=C7=B2=BB=CA= =C7=BB=B9=B5=C3=C4=DC=D6=A7=B3=D6CGI=C7=EB=C7=F3=A3=AC=CE=D2=D7=DC=B2=BB=C4= =DC=B0=D1CGI=B7=C5=B5=BD=D4=B6=B7=BD=B5=C4Server=C0=EF=A3=AC=CD=A8=B9=FD=B4= =F2=BF=AA=C4=C7=B8=F6Cgi=CA=B5=CF=D6=B0=C9=A1=A3 >=20 > =D5=E2=D0=A9=B6=BC=CA=C7=C4=BF=C7=B0=B1=C8=BD=CF=C0=A7=BB=F3=B5=C4=CE=CA= =CC=E2 >=20 > =CF=A3=CD=FB=B5=C3=B5=BD=B8=F7=CE=BB=C5=F3=D3=D1=C3=C7=B5=C4=B0=EF=D6=FA= =A3=AC=BD=A8=D2=E9=A3=AC=B7=BD=B0=B8=BB=F2=D5=DF=D3=D0=B9=D8=BC=BC=CA=F5=CE= =C4=B5=B5 >=20 > =D0=BB=D0=BB=A3=A1 >=20 > =CD=F5=B3=AC > =20 > =20 > =20 > =20 > =D2=F2=CE=AA=CE=D2=C3=BB=D4=F5=C3=B4=D7=F6=B9=FD=BF=AA=B7=A2=A3=AC=D2=D4= =C7=B0=D7=F6=B9=FD=D7=EE=B4=F3=B5=C4=D2=BB=B8=F6=CF=EE=C4=BF=BE=CD=CA=C7=D3= =C3JSP=D0=B4=C1=CB=B8=F6=B9=A6=C4=DC=BC=B0=C6=E4=C8=F5=D6=C7=B5=C4Webmail= =CF=B5=CD=B3=A1=A3Python=B5=C3=BE=AD=D1=E9=B8=FC=C9=D9=A3=AC=CB=F9=D2=D4=D5= =E2=B8=F6=CF=EE=C4=BF=B6=D4=CE=D2=C0=B4=CB=B5=C4=D1=B6=C8=BA=DC=B4=F3=A1=A3 > =20 > =BF=CF=B6=A8=CA=C7=D2=AA=D0=B4=D2=BB=B8=F6Web Service=C1=CB=A3=AC=D5=E2= =B8=F6Web service=D6=BB=D0=E8=D2=AA=CF=EC=D3=A6HTTP > GET=C7=EB=C7=F3=A3=AC=D2=AA=C4=DC=B9=BB=B8=F8=D4=B6=B7=BD=D3=C3=BB=A7=B4= =AB=CE=C4=BC=FE=A3=AC=BB=B9=D2=AA=C4=DC=CF=EC=D3=A6=D4=B6=B7=BD=B5=C4REST= =C7=EB=C7=F3=B2=A2=B7=B5=BB=D8XML=A1=A3=D2=F2=CE=AAREST=C7=EB=C7=F3=D6=BB= =D3=D0=CC=D8=B6=A8=B5=C4=BC=B8=D6=D6=A3=AC=CE=D2=CF=EB=D6=BB=D2=AA=B8=F8=B4= =FA=C2=EB=C0=EF=D4=F6=BC=D3=D2=BB=D0=A9=CC=F5=BC=FE=A3=AC=B5=B1=BD=D3=CA=D5= =B5=BD=C7=EB=C7=F3=B5=C4=CA=B1=BA=F2=A3=AC=B8=F9=BE=DD=C7=EB=C7=F3=B2=CE=CA= =FD=D1=A1=D4=F1=CC=D8=B6=A8=B5=C4=B4=A6=C0=ED=B7=BD=B7=A8=BE=CD=BF=C9=D2=D4= =C1=CB=B0=C9=A1=A3Web > Service=CB=E4=C8=BB=CF=D6=D4=DA=BB=B9=D0=B4=B2=BB=B3=F6=C0=B4=A3=AC=B5=AB= =CA=C7=D6=C1=C9=D9=CB=BC=C2=B7=CA=C7=C7=E5=CE=FA=B5=C4=A1=A3=20 > =20 > =B5=AB=D4=DA=C1=ED=CD=E2=D2=BB=B0=EB=B5=C4=BC=DC=B9=B9=C9=CF=A3=AC=CE=D2= =D2=BB=D6=B1=CF=EB=B2=BB=C3=F7=B0=D7=A3=AC=B6=F8=C7=D2=B7=C7=B3=A3=B5=C4=C0= =A7=BB=F3=A1=A3=D2=F2=CE=AA=D5=E2=B8=F6Project=CA=C7=C3=BB=D3=D0GUI=B5=C3= =A3=A8=CA=C2=CA=B5=C9=CF=A3=AC=CE=D2=D2=B2=B2=BB=BB=E1=D0=B4GUI)=A3=AC=D2= =AA=D3=C3=E4=AF=C0=C0=C6=F7=B8=FA=D3=C3=BB=A7=BD=BB=BB=A5=A3=AC=CE=D2=BE=CD= =CF=EB=B2=BB=CD=A8=B8=FA=D3=C3=BB=A7=BD=BB=BB=A5=B5=C4=B6=AB=CE=F7=D2=AA=D4= =F5=C3=B4=CA=B5=CF=D6=A1=A3=CB=FC=D2=AA=C4=DC=D4=DAAddress > Server=C9=CF=D7=A2=B2=E1=BA=CD=B7=B4=D7=A2=B2=E1=A3=AC=D2=AA=C4=DC=B2=E9= =D1=AFAddress > Server=C9=CF=CB=F9=D3=D0=D4=DA=CF=DFPeers=A3=AC=BB=B9=D2=AA=C4=DC=B8=F9= =BE=DDPeers=C1=D0=B1=ED=A3=AC=CF=F2=CB=F9=D3=D0Peers=B7=A2=CB=CD=B2=E9=D1= =AF=C7=EB=C7=F3=A3=AC=BB=B9=D2=AA=C4=DC=B8=F9=BE=DD=B2=E9=D1=AF=B5=BD=B5=C4= =B6=AB=CE=F7=A3=AC=C0=B4=CF=C2=D4=D8=A1=A3=B5=AB=D5=E2=D0=A9=A3=AC=C4=DC=D7= =F6=B5=BD=E4=AF=C0=C0=C6=F7=C0=EF=C3=B4=A3=BF > =20 > =CE=D2=BF=C9=D2=D4=B0=D1=D7=A2=B2=E1=B7=B4=D7=A2=B2=E1=BA=CD=B2=E9=D1=AFP= eers=BC=AF=B3=C9=B5=BDWeb Service=C0=EF=A3=AC=C6=F4=B6=AF=B5=C4=CA=B1=BA=F2= =CD=EA=B3=C9=D7=A2=B2=E1=BA=CD=B2=E9=D1=AF=A1=A3=20 > =B5=AB=CA=C7=B2=E9=D1=AF=BA=CD=CF=C2=D4=D8=BF=CF=B6=A8=CA=C7=CE=D2=B5=C4C= lient=B8=FA=D3=C3=BB=A7=C0=B4=BD=BB=BB=A5=C1=CB=A3=AC=D5=E2=B8=F6Client=D4= =F5=C3=B4=CA=B5=CF=D6=A3=BF=D3=C3=BF=D8=D6=C6=CC=A8=B2=BB=B4=F3=CF=D6=CA=B5= =A3=AC=D3=C3Python=D0=B4Cgi=BD=C5=B1=BE=A3=BF=D5=E2=B8=F6=BD=C5=B1=BE=B7=C5= =C4=C4=A3=BF=B7=C5=B5=BD=CE=D2=B5=C4=B1=BE=B5=D8=A3=BF=CE=D2=B5=C4Web > service=B2=BB=D6=A7=B3=D6=B0=A2=A1=A3=B7=C5=B5=BD=D6=A7=B3=D6Cgi=B5=C3=D4= =B6=B3=CC=B7=FE=CE=F1=C6=F7=A3=BF=BA=C3=CF=F1=B8=FC=B2=BB=D0=D0=A1=A3=20 > =20 > =20 > =CB=F9=D2=D4=CF=D6=D4=DA=BA=DC=D3=F4=C3=C6=A1=A3=CF=A3=CD=FB=C4=E3=C4=DC= =B0=EF=D6=FA=CE=D2=BD=E2=B4=F0=D5=E2=D0=A9=CE=CA=CC=E2=A3=AC=D0=BB=D0=BB=A1= =A3=20 > =20 > =20 > =CD=F5=B3=AC=20 > =20 > PS:=D5=E2=CF=C2=C3=E6=D3=D0=BC=B8=B6=CE=B4=FA=C2=EB=B7=D6=B1=F0=CA=C7Addr= ess server=C0=B4=CF=EC=D3=A6=D7=A2=B2=E1=BA=CD=B2=E9=D1=AF=C7=EB=C7=F3=B5= =C4=BD=C5=B1=BE=20 > =D2=BB=B8=F6=BD=C5=B1=BE=A3=AC=C4=A3=C4=E2peers=C0=B4=CF=EC=D3=A6=B2=E9= =D1=AF=B8=E8=C7=FA=B5=C4=C7=EB=C7=F3=B2=A2=B8=F8=B3=F6XML=A1=A3=20 > =BB=B9=D3=D0=D2=BB=B8=F6Web Service=B5=C4=CA=BE=C0=FD=B4=FA=C2=EB=20 > =20 > =20 > Peerdb.cgi=20 > =20 > #!/usr/bin/python=20 > =20 > ### a simple cgi script to manage registration of peers. > ### requestTypes: register, findAllPeers, unregister=20 > =20 > from xml.dom.ext import PrettyPrint > from xml.dom import minidom > import sys > import sys, cgi, time > import cgitb; cgitb.enable()=20 > =20 > =20 > def registerUser(form) : > username =3D form['name'].value > useraddr =3D form['address'].value=20 > =20 > users =3D minidom.parse('./userdb.xml')=20 > =20 > usernode =3D users.createElement('user') > namenode =3D users.createElement('name') > addrnode =3D users.createElement('address') > namenode.appendChild(users.createTextNode(username)) > addrnode.appendChild(users.createTextNode(useraddr)) > usernode.appendChild(namenode) > usernode.appendChild(addrnode)=20 > =20 > toplevel =3D users.getElementsByTagName('users')[0] > toplevel.appendChild(usernode)=20 > =20 > f =3D file('./userdb.xml','w') > f.write(users.toxml()) > f.close()=20 > =20 > str =3D > "\nRegisterReply\ntrue\n" > str +=3D "" + time.strftime("%a, %d %b %Y %H:%M:%S", > time.localtime()) > str =3D str + "\n\n"=20 > =20 > print str=20 > =20 > def findAllPeers(form) :=20 > =20 > users =3D minidom.parse('./userdb.xml') > replyNode =3D users.createElement('reply') > typeNode =3D users.createElement('type') > typeNode.appendChild(users.createTextNode('UserListReply')) > statusNode =3D users.createElement('success') > statusNode.appendChild(users.createTextNode('true')) > dateNode =3D users.createElement('dateTime') > dateNode.appendChild(users.createTextNode(time.strftime("%a, %d %b %Y > %H:%M:%S", time.localtime()))) > replyNode.appendChild(typeNode) > replyNode.appendChild(statusNode) > replyNode.appendChild(dateNode)=20 > =20 > oldroot =3D users.getElementsByTagName('users')[0] > replyNode.appendChild(oldroot)=20 > =20 > print replyNode.toxml()=20 > =20 >=20 > def unregisterUser(form) :=20 > =20 >=20 > username =3D form['name'].value > users =3D minidom.parse('./userdb.xml') > u =3D users.getElementsByTagName('name') > for item in u : > if item.firstChild.data.strip() =3D=3D username.strip() : > #print item.firstChild.data.strip() > toplevel =3D users.getElementsByTagName('users')[0] > toplevel.removeChild(item.parentNode)=20 > =20 > f =3D file('./userdb.xml','w') > f.write(users.toxml()) > f.close()=20 > =20 > str =3D > "\nRegisterReply\ntrue\n" > str +=3D "" + time.strftime("%a, %d %b %Y %H:%M:%S", > time.localtime()) > str =3D str + "\n\n"=20 > =20 > print str=20 > =20 >=20 > =20 > form=3Dcgi.FieldStorage() > =20 > print 'Content type: text/xml' > print=20 > =20 >=20 > request =3D form["requestType"].value=20 > =20 > if request =3D=3D 'register' : > registerUser(form); > elif request =3D=3D 'findAllPeers' : > findAllPeers(form)=20 > elif request =3D=3D 'unregister' : > unregisterUser(form)=20 > =20 > =20 > =20 > testSearch.cgi=20 >=20 > =20 > #!/usr/bin/python=20 > =20 > ### a simple cgi script to allow testing of search queries=20 > =20 >=20 > from xml.dom.ext import PrettyPrint > from xml.dom import minidom > import sys > import sys, cgi, time > import cgitb; cgitb.enable()=20 > =20 > form=3Dcgi.FieldStorage()=20 > =20 > field=3Dform['field'].value > keyword=3Dform['keyword'].value=20 > =20 > songs =3D minidom.parse('./sampleDB/music.xml') > nodes =3D songs.getElementsByTagName(field)=20 > =20 > print 'Content type: text/xml' > print=20 > =20 >=20 > results =3D [] > for node in nodes : > if node.firstChild.data =3D=3D keyword: > results.append(node.parentNode)=20 > =20 >=20 > replyNode =3D songs.createElement('reply') > typeNode =3D songs.createElement('type') > typeNode.appendChild(songs.createTextNode('UserListReply')) > statusNode =3D songs.createElement('success') > statusNode.appendChild(songs.createTextNode('true')) > dateNode =3D songs.createElement('dateTime') > dateNode.appendChild(songs.createTextNode(time.strftime("%a, %d %b %Y > %H:%M:%S", time.localtime())))=20 > =20 > songNode =3D songs.createElement('songs') > for item in results : > songNode.appendChild(item) > replyNode.appendChild(typeNode) > replyNode.appendChild(statusNode) > replyNode.appendChild(dateNode) > replyNode.appendChild(songNode)=20 > =20 > print replyNode.toxml()=20 > =20 > =20 > =20 > =D7=EE=BA=F3=D2=BB=B6=CE=CA=C7HTTP =C7=EB=C7=F3=B5=C4=B4=FA=C2=EB=20 > =20 >=20 > Here is a simple program that processes HTTP requests, checks to see if t= he > request has parameters attached, and then returns 'hello world' to the > client.=20 >=20 > In Python, you provide the BaseHTTPServer class with a handler that is > responsible for servicing GET and POST requests. (we are only dealing wit= h > GET in this project.) It should inherit from both CGIHTTPRequestHandler a= nd > object. (see the comment for an explanation of this.)=20 >=20 > do_GET is invoked by the BaseHTTPServer whenever a GET request is receive= d. > This is where you'll do your work. If you like, you can invoke a separate > CGI script at this point.=20 >=20 > The first thing to notice is that this DOES NOT work the way that the cgi > module does. In particular, stdout is not redirected back to the client. > Instead, self.wfile is returned to the client. So, to send back a file, u= se > self.copyfile, which is inherited from BaseHTTPRequestHandler.=20 >=20 > Also, in this code, I want to send back a string, rather than a file. I > could write the data out to a temp file, but that's messy, so I use the > StringIO class. It provides a String that has an associated file handle, = so > it can be manipulated just like a file. In this case, I write to the stri= ng, > then use seek to reset the file pointer, then self.copyfile to move the > 'file contents' onto the output stream.=20 >=20 > self.path includes everything in the URL after the hostname and port. Thi= s > is where you will extract arguments.=20 >=20 > Note that, if path doesn't contain a '?', I call the superclass' do_GET > method. The syntax for doing this is a little odd. super takes the name o= f a > type and the object to be referenced, and returns a new object of the > superclass' type. In order for this to work, you must (indirectly) inheri= t > from object.=20 >=20 > self.send_header() can be used to send back any necessary HTTP headers. T= ake > a look at the BaseHTTPRequestHandler (in BaseHTTPServer) and the > CGIHTTPRequestHandler (in CGIHTTPServer) for more usage.=20 >=20 > saddr is the host, port tuple ('' is localhost) - when starting an > HTTPServer, you should provide a saddr and a handler.=20 >=20 > import SimpleHTTPServer, BaseHTTPServer, httplib > from CGIHTTPServer import CGIHTTPRequestHandler > from StringIO import StringIO >=20 >=20 > =20 > ### in order for super() to work, myHandler must be a 'new-style object' > ### old-style objects work like objects in C++ - they ae a classobj, rath= er > ### than a type. They are not required to have a superclass. > ### although myHandler has a superclass, apparently CGIHTTPRequestHandler > ### does not derive from object. > ### To get new-style class behavior, we also derive from object. A strang= e > ### hack to preserve both methods of OO ... >=20 > class myHandler(CGIHTTPRequestHandler,object) : > def do_GET(self) : > if self.path.find('?') > 0 :=20 > args =3D self.parsePath(self.path) > print args > print 'doing get' > f=3DStringIO() > f.write('hello wold') > self.send_header("Content-type", "text/html") > self.send_header("Content-Length", 11) > self.end_headers() > f.seek(0) > self.copyfile(f, self.wfile) > else : > super(myHandler,self).do_GET() >=20 > def parsePath(self, pathString) : > args =3D pathString.split('?')[1] > pairs =3D [s.split('=3D') for s in args.split('&')] > pairDict =3D {} > for item in pairs : > pairDict[item[0]] =3D item[1] > return pairDict >=20 >=20 > saddr=3D("",8000) > m=3DBaseHTTPServer.HTTPServer(saddr, myHandler) > m.serve_forever() >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 >=20 > =20 --=20 [Time is unimportant, only life important!]

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年04月07日 星期四 10:52

Chao Wang xtchao at gmail.com
Thu Apr 7 10:52:04 HKT 2005

=D0=BB=D0=BB=C4=E3=B5=C4=BB=D8=B8=B4
=B2=BB=B9=FD=CE=CA=CC=E2=C9=D4=CE=A2=D3=D0=D0=A9=C6=AB=B2=EE=A1=A3P2P=B5=C4=
=B8=C5=C4=EE=CA=C7=C3=BB=CE=CA=CC=E2=B5=C4=A1=A3=A3=BA=A3=A9

=C4=C7=B8=F6=CB=F9=CE=BD=B5=C4Address Server=C6=E4=CA=B5=D6=BB=CA=C7=D2=BB=
=B8=F6Python=D0=B4=B3=C9=B5=C4CGI=BD=C5=B1=BE +
=D2=BB=B8=F6=B4=E6=D3=D0=B5=B1=C7=B0=D4=DA=CF=DFPeers=B5=C4XML=CE=C4=BC=FE=
=A1=A3=B5=B1=CE=D2=B5=C4Peer=C6=F4=B6=AF=CA=B1=C4=DC=CD=A8=B9=FD=D5=E2=B8=
=F6=BD=C5=B1=BE=B0=D1=D7=D4=BC=BA=BC=D3=B5=BD=D4=DA=CF=DF=C1=D0=B1=ED=C0=EF=
=A3=AC=B2=A2=C4=DC=CD=A8=B9=FD=BD=C5=B1=BE=B2=E9=D1=AF=B5=BD=B5=B1=C7=B0=CB=
=F9=D3=D0=D4=DA=CF=DF=B5=C4Peers=A1=A3=D5=E2=B8=F6Address
Server=B5=C4=B9=A6=C4=DC=D6=BB=D3=D0=D5=E2=D0=A9=A1=A3

=D2=F2=CE=AA=D5=E2=B8=F6=CA=C7=D2=BB=B8=F6=BF=CE=B3=CC=C9=CF=B1=BB=B2=BC=D6=
=C3=B5=C4=CF=EE=C4=BF=A3=AC=CA=BE=B7=B6=D2=E2=D2=E5=B4=F3=D3=DA=CA=B5=BC=CA=
=D3=A6=D3=C3=D2=E2=D2=E5=A3=AC=CB=F9=D2=D4=BA=DC=B6=E0=B6=AB=CE=F7=B2=BB=D0=
=E8=D2=AA=BF=BC=C2=C7=B5=C3=C4=C7=C3=B4=B8=B4=D4=D3=A3=AC=B5=AB=D2=B2=D3=D0=
=BA=DC=B6=E0=B6=AB=CE=F7=B6=BC=D0=E8=D2=AA=B0=B4=D7=C5=B2=BC=D6=C3=B5=C4=D2=
=AA=C7=F3=D7=F7=A1=A3

=B1=C8=C8=E7Web Service=A3=AC=CA=C7=D2=BB=B6=A8=D2=AA=D7=D4=BC=BA=D0=B4=B5=
=C4=A1=A3=B1=C8=C8=E7=D2=AA=CD=A8=B9=FD=E4=AF=C0=C0=C6=F7=C0=B4=B8=FA=D3=C3=
=BB=A7=BD=BB=BB=A5=A1=A3

=CE=D2=C6=F0=B3=F5=B5=C4=C9=E8=BC=C6=CB=BC=C2=B7=CA=C7Peer=B5=C4Client=B9=
=A6=C4=DC=BA=CDService=B9=A6=C4=DC=B7=D6=C0=EB=A1=A3=D3=C9Web
Service=B8=BA=D4=F0=CF=EC=D3=A6=C6=E4=CB=FBPeer=B5=C4=C7=EB=C7=F3=A3=A8=B0=
=FC=C0=A8=D4=DAAddress
server=D7=A2=B2=E1=B7=B4=D7=A2=B2=E1=A3=A9=A3=AC=D4=D9=D3=D0=D2=BB=B8=F6=B6=
=C0=C1=A2=B5=C4Client=C8=A5=B8=FA=C6=E4=CB=FBPeers=B9=B5=CD=A8=A3=AC=CD=A8=
=B9=FD=E4=AF=C0=C0=C6=F7=C0=B4=B2=E9=D1=AF=A3=AC=CF=C2=D4=D8=A3=AC=B5=C8=B5=
=C8=A1=A3=B5=AB=CA=C7=CF=EB=C1=CB=CF=EB=A3=AC=BA=C3=CF=F1=CA=B5=CF=D6=B2=BB=
=C1=CB=A3=AC=BB=F2=D5=DF=CB=B5=A3=AC=CE=D2=B2=BB=B9=BB=BC=BC=CA=F5=C0=B4=CA=
=B5=CF=D6=A1=A3=D2=F2=CE=AA=CF=EB=B2=BB=C3=F7=B0=D7=A3=AC=D3=C3=E4=AF=C0=C0=
=C6=F7=B5=C4=BB=B0=A3=AC=CE=D2=B5=C4=B4=FA=C2=EB=B7=C5=D4=DA=C4=C4=C0=EF=A3=
=BF=CD=A8=B9=FD=CA=B2=C3=B4=B5=F7=D3=C3=D5=E2=D0=A9=B4=FA=C2=EB=A1=A3=D4=F5=
=C3=B4=B5=F7=D3=C3=A1=A3

=BC=C8=C8=BB=C3=BB=D3=D0GUI=A3=AC=BE=CD=B5=C3=D7=C1=C4=A5=C4=DC=B8=FA=E4=AF=
=C0=C0=C6=F7=C5=E4=BA=CF=D7=C5=D3=C3=B5=C4=B6=AB=CE=F7=A1=A3=CE=D2=CF=D6=D4=
=DA=B5=C4=CF=EB=B7=A8=CA=C7=CB=F9=D3=D0=B5=C4=B4=FA=C2=EB=B6=BC=B7=C5=B5=BD=
Web
Service=C0=EF=A3=AC=C8=C3=D5=E2=B8=F6Service=BC=B4=C4=DC=CF=EC=D3=A6=CD=E2=
=C3=E6=C0=B4=B5=C4REST=C7=EB=C7=F3=C8=A1=CE=C4=BC=FE=C7=EB=C7=F3=A3=AC=D3=
=D6=C4=DC=CE=AA=B1=BE=BB=FA=B5=C4Client=B7=FE=CE=F1=A3=AC=B8=F9=BE=DD=B1=BE=
=BB=FA=CD=A8=B9=FDhttp://localhost/?parameter=B4=AB=B5=DD=C0=B4=B5=C4=CF=E0=
=D3=A6=B5=C4=B2=CE=CA=FD=C8=A5=B8=FA=D4=B6=B7=BDPeers=B9=B5=CD=A8=A3=AC=C8=
=BB=BA=F3=D4=D9=B4=A6=C0=ED=B9=B5=CD=A8=B5=C4=B7=B4=C0=A1XML=A3=AC=D7=EE=BA=
=F3=B4=AB=B8=F8=E4=AF=C0=C0=C6=F7=A1=A3=C4=C7=D1=F9=B8=FA=D3=C3=BB=A7=BD=BB=
=BB=A5=B5=C4Client=BF=C9=D2=D4=D6=BB=CA=C7=D2=BB=B8=F6=B5=A5=B4=BF=B5=C4=BE=
=B2=CC=ACHTML=CD=F8=D2=B3=A1=A3=B5=AB=CA=C7=CB=C6=BA=F5=D5=E2=B8=F6=B7=BD=
=B0=B8=B8=FC=B6=F1=D0=C4=A1=A3

=C6=E4=CB=FB=B5=C4=B7=BD=B7=A8=A3=AC=B8=FC=CF=EB=B2=BB=B3=F6=C0=B4=A1=A3

=C4=BF=C7=B0=B5=C4=C0=A7=C4=D1=D6=F7=D2=AA=BC=AF=D6=D0=D4=DA=D5=E2=C0=EF

=CD=F5=B3=AC

On Apr 6, 2005 6:45 PM, Zoom Quiet <zoom.quiet at gmail.com> wrote:
> =E0=C0=E0=C0=A3=AC=C4=E3=B5=C4=D3=CA=BC=FE=CE=D2=D4=DAGmail =D6=D0=CA=C7=
=BC=D3=D0=C7=D7=A2=C3=F7=B5=C4=A3=A1
> =CA=C7=B7=C7=B3=A3=BA=C3=B5=C4=D3=A6=D3=C3=CF=EE=C4=BF=C4=D8=A3=AC=B6=BC=
=BC=C6=BB=AE=A3=AC=C0=FB=D3=C3=C4=E3=B5=C4=B4=FA=C2=EB=D7=CA=D4=B4=C1=CB=A3=
=A1
> =CF=D6=D4=DA=BF=B4=C0=B4=A3=AC=C4=E3=B5=C4 p2p =CA=C7=C3=BB=D3=D0=C0=ED=
=BD=E2=C7=E5=B3=FE=CB=BC=C2=B7=A3=BF=A3=A1
>=20
> =CB=F9=CE=BD P2P ,=D4=DA=CE=D2=BF=B4=C0=B4=A3=AC=CA=C7 People to People
> =C4=C7=CE=B4=A3=AC=D5=E2=C0=EF=BE=CD=B2=BB=D3=A6=B8=C3=CB=B5=D3=D0 Center=
 Serve =B5=C4=B6=AB=CE=F7=CA=C7=D2=B2=BA=F5=A3=BF=A3=A1
> =E0=C0=E0=C0=A3=AC=B2=BB=B9=FD=A3=AC=D2=AA=BD=F8=D0=D0=BF=EC=CB=D9=B5=C4=
=CB=D1=CB=F7=A3=AC=B2=E9=D1=AF=A3=AC=CD=B3=D2=BB=C8=CF=D6=A4=A3=AC=BB=B9=CA=
=C7=D2=AA=D3=D0=B8=F6"=D6=D0=D0=C4=B7=FE=CE=F1"=BB=FA=D6=C6=B5=C4
>=20
> =BC=B4=A3=AC=C4=E3=CB=B5=B5=C4=D7=A2=B2=E1=A3=AC=B7=B4=D7=A2=B2=E1=A3=AC=
=BD=F6=BD=F6=D3=A6=B8=C3=CB=B5=CA=C7=BC=D3=C8=EB"P2P=D2=F4=C0=D6=B7=D6=CF=
=ED"=B5=C4=C9=F9=C3=F7=A3=A1
> =B4=D3=D6=D0=D0=C4=B7=FE=CE=F1=C6=F7=D6=D0=BB=F1=B5=C3=CE=A8=D2=BB=B5=C4=
=B1=EA=CA=B6=A3=AC=D2=D4=B1=E3=C6=E4=CB=FC=C8=CB=BF=C9=D2=D4=D6=AA=B5=C0=C4=
=E3=BB=FA=C6=F7=B5=C4=B5=D8=D6=B7=A3=AC
> =B6=F8=CA=B5=BC=CA=BD=F8=D0=D0=D2=F4=C0=D6=B7=D6=CF=ED=CA=B1=A3=AC=B6=BC=
=CA=C7=B5=BD=B6=D4=D3=A6=B5=C4=C3=BF=B8=F6=C8=CB=B5=C4=BB=FA=C6=F7=D7=C5=BD=
=F8=D0=D0=B5=C4=A3=BB
> =CB=F9=D2=D4=A3=AC=C4=E3=CB=F9=CE=BD=B5=C4 Client ,=C6=E4=CA=B5=B2=C5=CA=
=C7=D5=E6=D5=FD=CC=E1=B9=A9=B7=D6=CF=ED=B7=FE=CE=F1=B5=C4=B7=FE=CE=F1=C6=F7=
=A3=A1
>=20
> =C4=C7=CE=B4=A3=AC=C4=E3=D2=AA=CF=EB=CD=A8=B5=C4=CA=C7:
> 1. =B8=F6=C8=CB=BB=FA=C6=F7=C8=E7=BA=CE=BF=C9=D2=D4=B7=D6=CF=ED=CE=C4=BC=
=FE=B8=F8=C6=E4=CB=FC=C8=CB=A3=BF
> 2. =B8=F6=C8=CB=BB=FA=C6=F7=C9=CF=B5=C4=D7=CA=D4=B4=C8=E7=BA=CE=BF=C9=D2=
=D4=C1=EE=CB=F9=D3=D0=C8=CB=BF=C9=D2=D4=B2=E9=D1=AF=B5=BD?
> 3. =C8=E7=BA=CE=B1=A3=D6=A4=B8=F6=C8=CB=BB=FA=C6=F7=C9=CF=B5=C4=CE=C4=BC=
=FE=B7=D6=CF=ED=CA=C7=B0=B2=C8=AB=B5=C4=BF=C9=D0=C5=C8=CE=B5=C4?
>=20
> OK!=CD=EA=C8=AB=BF=C9=D2=D4=BD=E8=BC=F8Bt =B5=C4=CB=BC=C2=B7=CA=C7=D2=B2=
=BA=F5?!
> =D6=C1=D3=DA=D3=D0=B7=F1GUI ,=CD=EA=C8=AB=B2=BB=D3=C3=B5=A3=D0=C4,=D6=BB=
=D2=AA=C9=E8=BC=C6=BA=CF=C0=ED,=D3=D0=D7=E3=B9=BB=BA=C3=B5=C4API =CC=E1=B9=
=A9,GUI =B2=BB=B9=FD=CA=C7=C4=A9=BD=DA,
> =CE=D2=B5=C4=BD=A8=D2=E9=CA=C7:
> 1. =CB=F9=CE=BD=B7=FE=CE=F1=C6=F7,=BD=F6=BD=F6=CA=C7=B7=A2=B7=C5Peer =D6=
=A4=CA=E9=B5=C4=B5=D8=B7=BD,=C1=ED=CD=E2=D2=AA=B8=BA=D4=F0=C3=BF=B8=F6Peer =
=C9=CF=D7=CA=D4=B4=C1=D0=B1=ED=B5=C4=BB=E3=BC=AF,=B8=FC=D0=C2,=CC=E1=B9=A9=
=CB=D1=CB=F7;
> 2. =CB=F9=CE=BD Client =D3=A6=B8=C3=CB=B5=CA=C7=B8=F6=C6=BD=CC=A8=CE=DE=
=B9=D8=B5=C4Http =B7=FE=CE=F1=CA=D8=BB=A4,=86=94=86=94=86=94!=B1=C8=C8=E7=
=CB=B5=C0=FB=D3=C3 CherryPy
> =B5=C8=B5=C8=C7=E1=C7=C9=B5=C4Web=D3=A6=D3=C3=C6=BD=CC=A8,=C6=F4=B6=AF=D2=
=BB=B8=F6=BF=C9=D2=D4=CE=AA=CD=E2=B2=BF=B7=C3=CE=CA=B5=C4Web=D5=BE=B5=E3,=
=C0=B4=CC=E1=B9=A9=CF=C2=D4=D8;
>=20
> =D5=E2=D1=F9=D2=BB=C0=B4,=B4=F3=BC=D2=BF=C9=D2=D4=D4=DA"Client"=B5=C4=D5=
=BE=B5=E3=D6=D0=B9=DC=C0=ED=D7=D4=B8=F6=B6=F9=BB=FA=C6=F7=D6=D0=B9=B2=CF=ED=
=B5=C4=D7=CA=D4=B4,=CD=AC=CA=B1=BF=C9=D2=D4=BD=F8=D0=D0=CB=D1=CB=F7=CB=F9=
=D3=D0=B7=D6=CF=ED=C1=D0=B1=ED=D6=D0=B5=C4=CE=C4=BC=FE,=BD=F8=D0=D0=CF=C2=
=D4=D8,=B6=F8=CF=C2=D4=D8=B5=C4=BB=EE=B6=AF=CD=EA=C8=AB=BF=C9=D2=D4=CA=B9=
=D3=C3=B1=EA=D7=BC=B5=C4=C6=E4=CB=FC=D7=A8=D3=C3=CF=C2=D4=D8=B9=A4=BE=DF,=
=CA=C7=D2=B2=BA=F5?!
>=20
> (=D2=FE=BA=AC=B5=C4=B2=D9=D7=F7=CA=C7 "Client" =BD=C5=B1=BE=B5=BD "Server=
"=D5=BE=B5=E3=D6=D0=BD=F8=D0=D0=CB=D1=CB=F7,=D7=E9=D6=AF=CE=AA=D6=B8=CF=F2=
=B8=F7=B8=F6=BB=FA=C6=F7=B5=D8=D6=B7=B5=C4=CF=C2=D4=D8=C1=B4=BD=D3!)
>=20
> =D2=D4=C9=CF,=B2=BB=D6=AA=B5=C0=CA=C7=B7=F1=CB=B5=C7=E5=B3=FE=C1=CB
>=20
> On Apr 7, 2005 5:34 AM, wangchao <iwillipo at gmail.com> wrote:
> >
> > Hi Zoom,
> >
> >
> > =CD=FC=BC=C7=CA=B2=C3=B4=CA=B1=BA=F2=BC=D3=B5=C3=C1=CB=A3=AC=B5=AB=C4=
=E3=D2=BB=D6=B1=D4=DA=CE=D2=B5=C4MSN=BA=C3=D3=D1=C0=EF=A3=AC=B2=BB=B9=FD=B2=
=BB=D6=AA=B5=C0=CE=D2=CA=C7=B7=F1=D4=DA=C4=E3=B5=C4=BA=C3=D3=D1=C0=EF=A3=AC=
=CE=D2=B5=C4MSN=C3=FB=D7=D6=CA=C7Chao
> > =CE=D2=BE=CD=CA=C7=C7=B0=BC=B8=CC=EC=D4=DAPython-Cn=B5=C3maillist=C0=EF=
=B7=A2=C4=C7=B8=F6P2P=CF=EE=C4=BF=C7=F3=D6=FA=B5=C4=BC=D2=BB=EF=A1=A3
> > =A3=BA=A3=A9=BA=F3=C0=B4=CA=D6=CD=B7=C9=CF=D3=D6=D4=DC=C1=CB=D0=A9=C6=
=E4=CB=FB=B5=C4=CA=C2=A3=AC=BE=CD=CF=C8=B0=D1=C4=C7=B8=F6=B7=C5=D2=BB=B7=C5=
=C1=CB=A1=A3=CF=D6=D4=DA=D3=D6=D2=AA=BF=AA=CA=BC=D7=F6=C4=C4=B8=F6=C1=CB=A3=
=AC=B6=F8=C7=D2=CA=B1=BC=E4=CD=A6=BD=F4=B5=C4=A3=AC=D6=BB=D3=D0=C8=FD=CB=C4=
=CC=EC=C1=CB=A1=A3
> >
> > =CE=D2=D4=DA=B0=D1=B5=B1=CA=B1Pythoncn=C9=CF=B5=C4=B6=AB=CE=F7copy&past;=
e=D2=BB=CF=C2
> >
> > P2P=B9=B2=CF=ED=D2=F4=C0=D6=BF=CD=BB=A7=B6=CB=CF=EE=C4=BF
> >
> > =BF=CD=BB=A7=B6=CB=B9=A6=C4=DC=D2=AA=C7=F3=A3=BA
> > =D4=DA=D2=D1=BE=AD=CC=E1=B9=A9=B5=C4Address Server=C9=CF=D7=A2=B2=E1=D3=
=EB=D7=A2=CF=FA
> > =CD=A8=B9=FDAddress Server=B2=E9=D1=AF=C6=E4=CB=FB=D4=DA=CF=DF=B5=C4Pee=
rs
> > =B7=A2=CB=CD=B2=E9=D1=AF=C7=EB=C7=F3=B5=BD=C6=E4=CB=FBPeers
> > =CF=EC=D3=A6=C6=E4=CB=FBPeers=B5=C3=B2=E9=D1=AF=C7=EB=C7=F3
> > =B4=D3=C6=E4=CB=FBPeers=C9=CF=C7=EB=C7=F3=CE=C4=BC=FE=CF=C2=D4=D8
> > =CF=EC=D3=A6=C6=E4=CB=FBPeers=B5=C3=CE=C4=BC=FE=CF=C2=D4=D8=C7=EB=C7=F3
> >
> > =D3=C3=E4=AF=C0=C0=C6=F7=D7=F7=CE=AA=D3=EB=D3=C3=BB=A7=BD=BB=C1=F7=B5=
=C4=BD=E7=C3=E6
> >
> > =C4=BF=C7=B0Address Server=D2=D1=BE=AD=CC=E1=B9=A9=C1=CB
> >
> > =CD=A8=B9=FD=D5=E2=D1=F9=B5=C4URI=BF=C9=D2=D4=CA=B5=CF=D6=D4=DAAddress =
Server=C9=CF=D7=A2=B2=E1
> >
> > http://Server/peerdb.cgi?requestType=3Dregister&name;=3Dusername&address;=
=3Dip=B5=D8=D6=B7:=B6=CB=BF=DA=BA=C5
> >
> > =D7=A2=B2=E1=B3=C9=B9=A6=BA=F3=A3=AC=B5=C3=B5=BD=C8=E7=CF=C2XML=BB=D8=
=B8=B4
> > 
> >  RegisterReply
> >  true
> >  Tue 8 Mar, 2005 11:01:02 
> >  
> >
> > =CD=A8=B9=FDhttp://Server/~brooks/682/peerdb.cgi?requestType=3Dunregist=
er&name;=3D
> > =BF=C9=D2=D4=D4=DAAddress Server=C0=EF=D7=A2=CF=FA
> >
> > Address Server=BB=B9=D6=A7=B3=D6=D5=E2=D1=F9=B5=C4=B2=D9=D7=F7
> > http://server/peerdb.cgi?requestType=3DfindAllPeers
> > =BF=C9=D2=D4=B2=E9=D1=AF=B5=BD=CB=F9=D3=D0=D4=DA=CF=DF=B5=C4Peers
> >
> > =B5=C3=B5=BD=C8=E7=CF=C2XML=BB=D8=B8=B4
> > 
> >  UserListReply
> >  true
> >  Tue 8 Mar, 2005 11:01:02
> > 
> >  
> >     liudehua 
> >    
192.3.55.6:8000
> > > > > > zhangxueyou > >
133.66.197.2:8000
> > > > > > guofucheng > >
132.6.55.1:8000
> > > > > > > > > > =B5=B1=D3=C3=BB=A7=CF=EB=B2=E9=D1=AF=B8=E8=C7=FA=B5=C4=CA=B1=BA=F2 > > =B7=A2=CB=CD=C8=E7=CF=C2=C7=EB=C7=F3=B8=F8=CB=F9=D3=D0=D4=DA=CF=DF=B5= =C4Peers > > http://otherpeers:port?requestType=3Dsearch&field;=3Dartist&keyword;=3Dzh= oujielun > > > > Peers=BD=D3=B5=BD=D5=E2=D1=F9=B5=C4=C7=EB=C7=F3=BA=F3=A3=AC=D2=AA=B4=D3= =D7=D4=BC=BA=B5=C4XML=CA=FD=BE=DD=BF=E2=C0=EF=B2=E9=D1=AF=CA=C7=B7=F1=D3=D0= =B7=FB=BA=CF=CC=F5=BC=FE=B5=C4=B8=E8=C7=FA=A3=AC=B2=A2=B8=F8=D3=EB=CF=C2=C3= =E6=B8=F1=CA=BD=B5=C4XML=BB=D8=B8=B4=A1=A3 > > > > =B4=CBXML=CA=FD=BE=DD=BF=E2=B2=BB=D2=AA=C7=F3=C4=DC=CD=A8=B9=FDClient= =B8=FC=D0=C2=A3=AC=D2=B2=BE=CD=CA=C7=CB=B5=D4=DA=D2=BB=BF=AA=CA=BC=BD=A8=BA= =C3=D2=BB=B8=F6=D5=E2=D1=F9=B5=C4=CA=FD=BE=DD=BF=E2=A3=AC=B7=C5=C9=CF=BC=B8= =B8=F6=B8=E8=BE=CDOK=C1=CB=A3=AC=B8=F1=CA=BD=D2=B2=B2=BB=D3=C3=B8=FA=CF=C2= =C3=E6=B5=C4XML=D2=BB=D6=C2=A3=AC=B5=BD=CA=B1=BA=F2=CD=A8=B9=FDXSLT=D7=AA= =BB=BB=D2=BB=CF=C2=BE=CDOK > > > > > > SearchReply > > true > > Tue 8 Mar, 2005 11:01:02 > > > > > > > > Police Truck > > Dead Kennedys > > Give Me Convenience Or Give Me Death > > Punk > > http://111.111.111.111:8080/123.mp3> > > 16433776 > > Mon 7 Mar, 2005 11:01:02 > > dfsdfsdfsfdfsddfs > > > > ... > > > > > > > > > > =B7=A2=B3=F6=B2=E9=D1=AF=C7=EB=C7=F3=B5=C4Peers=B0=D1=B5=C3=B5=BD=B5=C4= XML=B7=AD=D2=EB=B3=F6=C0=B4=B8=F8=D3=C3=BB=A7=D4=C4=B6=C1=A3=AC=D3=C3=BB=A7= =D1=A1=D4=F1=CF=C2=D4=D8=C4=C4=CA=D7=B8=E8=C7=FA > > > > =D3=C3=BB=A7=BE=F6=B6=A8=CF=C2=D4=D8=BA=F3=A3=ACPeer=B8=F9=BE=DD=C9=CF= =C3=E6XML=C0=EF=B5=C4URL=A3=AC=B7=A2=B3=F6HTTP GET=C7=EB=C7=F3=A1=A3=D4=B6= =B7=BDPeer=CF=EC=D3=A6=B4=CB=C7=EB=C7=F3=A3=AC=B0=D1=CE=C4=BC=FE=B4=AB=B9= =FD=C8=A5=A1=A3 > > > > =BB=F9=B1=BE=B5=C4=B9=A6=C4=DC=D2=AA=C7=F3=BE=CD=CA=C7=D5=E2=D1=F9=C1= =CB=A1=A3 > > =D2=F2=CE=AA=D6=BB=CA=C7=B8=F6=BD=CC=D1=A7=C4=BF=B5=C4=B5=C4=CF=EE=C4= =BF=A3=AC=CB=F9=D2=D4=D5=E2=C0=EF=B2=BB=BF=BC=C2=C7Peers=BA=DC=B6=E0=B5=C4= =C7=E9=BF=F6=A3=AC=D4=DA=D5=E2=D2=BB=BC=D9=C9=E8=CF=C2=A3=AC=B7=A2=CB=CD=B2= =E9=D1=AF=C7=EB=C7=F3=B5=BD=C3=BF=B8=F6Peers=CA=C7=BF=C9=D0=D0=B5=C4 > > > > =C1=ED=CD=E2=A3=AC=D5=E2=C0=EF=B2=BB=BF=BC=C2=C7=D2=F2=CE=AA=B7=C0=BB= =F0=C7=BD=A3=AC=C4=DA=CD=F8=CE=DE=D3=B3=C9=E4=B5=C8=D4=AD=D2=F2=D4=EC=B3=C9= =B5=C4http=C7=EB=C7=F3=CE=DE=B7=A8=B5=BD=B4=EF=D4=B6=B7=BDPeers=B5=C4=C7=E9= =BF=F6=A1=A3 > > > > =B0=B4=D5=D5=D5=E2=D1=F9=D2=BB=B8=F6=C4=A3=D0=CD=A3=AC=CE=D2=B5=C4Clien= t=C6=F4=B6=AF=B5=C4=CD=AC=CA=B1=A3=AC=D2=B2=D2=AA=D4=DA=BA=F3=CC=A8=C6=F4= =B6=AF=D2=BB=B8=F6Web service=A3=AC=D5=E2=B8=F6Service=B2=BB=B5=AB=D2=AA=C4= =DC=CF=EC=D3=A6=C6=D5=CD=A8=B5=C4HTTP > > GET=C7=EB=C7=F3=A3=AC=BB=B9=B5=C3=C4=DC=CF=EC=D3=A6REST=C7=EB=C7=F3=A3= =AC=D4=DA=CD=F8=C9=CF=B2=E9=C1=CB=BA=DC=BE=C3=A3=AC=B6=BC=D5=D2=B2=BB=B5=BD= =CF=EC=D3=A6REST=B5=C3=D3=D0=B9=D8=B6=AB=B6=AB=A1=A3Python=D3=D0=B9=D8Web > > Service=B5=C3=B6=AB=B6=AB(BaseHTTPServer,CGIHTTPServer,CGIRequestHandle= r)=CB=C6=BA=F5=D2=B2=C3=BB=D3=D0=CE=C4=B5=B5=D6=A7=B3=D6 > > > > Service=C8=E7=B9=FB=B8=E3=B3=F6=C0=B4=A3=AC=C6=F4=B6=AF=C1=CB=D3=C0=D4= =B6=BC=E0=CC=FD=BE=CD=BA=C3=C1=CB=A3=AC=B5=AB=CA=C7Client=CB=C6=BA=F5=D3=D0= =B5=E3=C2=E9=B7=B3=A3=AC=D2=F2=CE=AA=C3=BB=D3=D0GUI=A3=AC=CD=A8=B9=FD=E4=AF= =C0=C0=C6=F7=BD=F8=D0=D0=B2=D9=D7=F7=B5=C4=BB=B0=A3=AC=CE=D2=D4=F5=C3=B4=CA= =B5=CF=D6=C6=F4=B6=AF=B0=A2=A3=BF=D3=C3=D2=BB=B8=F6Python=D0=B4=B5=C4cgi=BD= =C5=B1=BE=A3=BF=C4=C7=D1=F9=B5=C4=BB=B0=CE=D2=B5=C4Webservice=CA=C7=B2=BB= =CA=C7=BB=B9=B5=C3=C4=DC=D6=A7=B3=D6CGI=C7=EB=C7=F3=A3=AC=CE=D2=D7=DC=B2=BB= =C4=DC=B0=D1CGI=B7=C5=B5=BD=D4=B6=B7=BD=B5=C4Server=C0=EF=A3=AC=CD=A8=B9=FD= =B4=F2=BF=AA=C4=C7=B8=F6Cgi=CA=B5=CF=D6=B0=C9=A1=A3 > > > > =D5=E2=D0=A9=B6=BC=CA=C7=C4=BF=C7=B0=B1=C8=BD=CF=C0=A7=BB=F3=B5=C4=CE= =CA=CC=E2 > > > > =CF=A3=CD=FB=B5=C3=B5=BD=B8=F7=CE=BB=C5=F3=D3=D1=C3=C7=B5=C4=B0=EF=D6= =FA=A3=AC=BD=A8=D2=E9=A3=AC=B7=BD=B0=B8=BB=F2=D5=DF=D3=D0=B9=D8=BC=BC=CA=F5= =CE=C4=B5=B5 > > > > =D0=BB=D0=BB=A3=A1 > > > > =CD=F5=B3=AC > > > > > > > > > > =D2=F2=CE=AA=CE=D2=C3=BB=D4=F5=C3=B4=D7=F6=B9=FD=BF=AA=B7=A2=A3=AC=D2= =D4=C7=B0=D7=F6=B9=FD=D7=EE=B4=F3=B5=C4=D2=BB=B8=F6=CF=EE=C4=BF=BE=CD=CA=C7= =D3=C3JSP=D0=B4=C1=CB=B8=F6=B9=A6=C4=DC=BC=B0=C6=E4=C8=F5=D6=C7=B5=C4Webmai= l=CF=B5=CD=B3=A1=A3Python=B5=C3=BE=AD=D1=E9=B8=FC=C9=D9=A3=AC=CB=F9=D2=D4= =D5=E2=B8=F6=CF=EE=C4=BF=B6=D4=CE=D2=C0=B4=CB=B5=C4=D1=B6=C8=BA=DC=B4=F3=A1= =A3 > > > > =BF=CF=B6=A8=CA=C7=D2=AA=D0=B4=D2=BB=B8=F6Web Service=C1=CB=A3=AC=D5=E2= =B8=F6Web service=D6=BB=D0=E8=D2=AA=CF=EC=D3=A6HTTP > > GET=C7=EB=C7=F3=A3=AC=D2=AA=C4=DC=B9=BB=B8=F8=D4=B6=B7=BD=D3=C3=BB=A7= =B4=AB=CE=C4=BC=FE=A3=AC=BB=B9=D2=AA=C4=DC=CF=EC=D3=A6=D4=B6=B7=BD=B5=C4RES= T=C7=EB=C7=F3=B2=A2=B7=B5=BB=D8XML=A1=A3=D2=F2=CE=AAREST=C7=EB=C7=F3=D6=BB= =D3=D0=CC=D8=B6=A8=B5=C4=BC=B8=D6=D6=A3=AC=CE=D2=CF=EB=D6=BB=D2=AA=B8=F8=B4= =FA=C2=EB=C0=EF=D4=F6=BC=D3=D2=BB=D0=A9=CC=F5=BC=FE=A3=AC=B5=B1=BD=D3=CA=D5= =B5=BD=C7=EB=C7=F3=B5=C4=CA=B1=BA=F2=A3=AC=B8=F9=BE=DD=C7=EB=C7=F3=B2=CE=CA= =FD=D1=A1=D4=F1=CC=D8=B6=A8=B5=C4=B4=A6=C0=ED=B7=BD=B7=A8=BE=CD=BF=C9=D2=D4= =C1=CB=B0=C9=A1=A3Web > > Service=CB=E4=C8=BB=CF=D6=D4=DA=BB=B9=D0=B4=B2=BB=B3=F6=C0=B4=A3=AC=B5= =AB=CA=C7=D6=C1=C9=D9=CB=BC=C2=B7=CA=C7=C7=E5=CE=FA=B5=C4=A1=A3 > > > > =B5=AB=D4=DA=C1=ED=CD=E2=D2=BB=B0=EB=B5=C4=BC=DC=B9=B9=C9=CF=A3=AC=CE= =D2=D2=BB=D6=B1=CF=EB=B2=BB=C3=F7=B0=D7=A3=AC=B6=F8=C7=D2=B7=C7=B3=A3=B5=C4= =C0=A7=BB=F3=A1=A3=D2=F2=CE=AA=D5=E2=B8=F6Project=CA=C7=C3=BB=D3=D0GUI=B5= =C3=A3=A8=CA=C2=CA=B5=C9=CF=A3=AC=CE=D2=D2=B2=B2=BB=BB=E1=D0=B4GUI)=A3=AC= =D2=AA=D3=C3=E4=AF=C0=C0=C6=F7=B8=FA=D3=C3=BB=A7=BD=BB=BB=A5=A3=AC=CE=D2=BE= =CD=CF=EB=B2=BB=CD=A8=B8=FA=D3=C3=BB=A7=BD=BB=BB=A5=B5=C4=B6=AB=CE=F7=D2=AA= =D4=F5=C3=B4=CA=B5=CF=D6=A1=A3=CB=FC=D2=AA=C4=DC=D4=DAAddress > > Server=C9=CF=D7=A2=B2=E1=BA=CD=B7=B4=D7=A2=B2=E1=A3=AC=D2=AA=C4=DC=B2= =E9=D1=AFAddress > > Server=C9=CF=CB=F9=D3=D0=D4=DA=CF=DFPeers=A3=AC=BB=B9=D2=AA=C4=DC=B8=F9= =BE=DDPeers=C1=D0=B1=ED=A3=AC=CF=F2=CB=F9=D3=D0Peers=B7=A2=CB=CD=B2=E9=D1= =AF=C7=EB=C7=F3=A3=AC=BB=B9=D2=AA=C4=DC=B8=F9=BE=DD=B2=E9=D1=AF=B5=BD=B5=C4= =B6=AB=CE=F7=A3=AC=C0=B4=CF=C2=D4=D8=A1=A3=B5=AB=D5=E2=D0=A9=A3=AC=C4=DC=D7= =F6=B5=BD=E4=AF=C0=C0=C6=F7=C0=EF=C3=B4=A3=BF > > > > =CE=D2=BF=C9=D2=D4=B0=D1=D7=A2=B2=E1=B7=B4=D7=A2=B2=E1=BA=CD=B2=E9=D1= =AFPeers=BC=AF=B3=C9=B5=BDWeb Service=C0=EF=A3=AC=C6=F4=B6=AF=B5=C4=CA=B1= =BA=F2=CD=EA=B3=C9=D7=A2=B2=E1=BA=CD=B2=E9=D1=AF=A1=A3 > > =B5=AB=CA=C7=B2=E9=D1=AF=BA=CD=CF=C2=D4=D8=BF=CF=B6=A8=CA=C7=CE=D2=B5= =C4Client=B8=FA=D3=C3=BB=A7=C0=B4=BD=BB=BB=A5=C1=CB=A3=AC=D5=E2=B8=F6Client= =D4=F5=C3=B4=CA=B5=CF=D6=A3=BF=D3=C3=BF=D8=D6=C6=CC=A8=B2=BB=B4=F3=CF=D6=CA= =B5=A3=AC=D3=C3Python=D0=B4Cgi=BD=C5=B1=BE=A3=BF=D5=E2=B8=F6=BD=C5=B1=BE=B7= =C5=C4=C4=A3=BF=B7=C5=B5=BD=CE=D2=B5=C4=B1=BE=B5=D8=A3=BF=CE=D2=B5=C4Web > > service=B2=BB=D6=A7=B3=D6=B0=A2=A1=A3=B7=C5=B5=BD=D6=A7=B3=D6Cgi=B5=C3= =D4=B6=B3=CC=B7=FE=CE=F1=C6=F7=A3=BF=BA=C3=CF=F1=B8=FC=B2=BB=D0=D0=A1=A3 > > > > > > =CB=F9=D2=D4=CF=D6=D4=DA=BA=DC=D3=F4=C3=C6=A1=A3=CF=A3=CD=FB=C4=E3=C4= =DC=B0=EF=D6=FA=CE=D2=BD=E2=B4=F0=D5=E2=D0=A9=CE=CA=CC=E2=A3=AC=D0=BB=D0=BB= =A1=A3 > > > > > > =CD=F5=B3=AC > > > > PS:=D5=E2=CF=C2=C3=E6=D3=D0=BC=B8=B6=CE=B4=FA=C2=EB=B7=D6=B1=F0=CA=C7Ad= dress server=C0=B4=CF=EC=D3=A6=D7=A2=B2=E1=BA=CD=B2=E9=D1=AF=C7=EB=C7=F3=B5= =C4=BD=C5=B1=BE > > =D2=BB=B8=F6=BD=C5=B1=BE=A3=AC=C4=A3=C4=E2peers=C0=B4=CF=EC=D3=A6=B2=E9= =D1=AF=B8=E8=C7=FA=B5=C4=C7=EB=C7=F3=B2=A2=B8=F8=B3=F6XML=A1=A3 > > =BB=B9=D3=D0=D2=BB=B8=F6Web Service=B5=C4=CA=BE=C0=FD=B4=FA=C2=EB > > > > > > Peerdb.cgi > > > > #!/usr/bin/python > > > > ### a simple cgi script to manage registration of peers. > > ### requestTypes: register, findAllPeers, unregister > > > > from xml.dom.ext import PrettyPrint > > from xml.dom import minidom > > import sys > > import sys, cgi, time > > import cgitb; cgitb.enable() > > > > > > def registerUser(form) : > > username =3D form['name'].value > > useraddr =3D form['address'].value > > > > users =3D minidom.parse('./userdb.xml') > > > > usernode =3D users.createElement('user') > > namenode =3D users.createElement('name') > > addrnode =3D users.createElement('address') > > namenode.appendChild(users.createTextNode(username)) > > addrnode.appendChild(users.createTextNode(useraddr)) > > usernode.appendChild(namenode) > > usernode.appendChild(addrnode) > > > > toplevel =3D users.getElementsByTagName('users')[0] > > toplevel.appendChild(usernode) > > > > f =3D file('./userdb.xml','w') > > f.write(users.toxml()) > > f.close() > > > > str =3D > > "\nRegisterReply\ntrue\n" > > str +=3D "" + time.strftime("%a, %d %b %Y %H:%M:%S", > > time.localtime()) > > str =3D str + "\n\n" > > > > print str > > > > def findAllPeers(form) : > > > > users =3D minidom.parse('./userdb.xml') > > replyNode =3D users.createElement('reply') > > typeNode =3D users.createElement('type') > > typeNode.appendChild(users.createTextNode('UserListReply')) > > statusNode =3D users.createElement('success') > > statusNode.appendChild(users.createTextNode('true')) > > dateNode =3D users.createElement('dateTime') > > dateNode.appendChild(users.createTextNode(time.strftime("%a, %d %b = %Y > > %H:%M:%S", time.localtime()))) > > replyNode.appendChild(typeNode) > > replyNode.appendChild(statusNode) > > replyNode.appendChild(dateNode) > > > > oldroot =3D users.getElementsByTagName('users')[0] > > replyNode.appendChild(oldroot) > > > > print replyNode.toxml() > > > > > > def unregisterUser(form) : > > > > > > username =3D form['name'].value > > users =3D minidom.parse('./userdb.xml') > > u =3D users.getElementsByTagName('name') > > for item in u : > > if item.firstChild.data.strip() =3D=3D username.strip() : > > #print item.firstChild.data.strip() > > toplevel =3D users.getElementsByTagName('users')[0] > > toplevel.removeChild(item.parentNode) > > > > f =3D file('./userdb.xml','w') > > f.write(users.toxml()) > > f.close() > > > > str =3D > > "\nRegisterReply\ntrue\n" > > str +=3D "" + time.strftime("%a, %d %b %Y %H:%M:%S", > > time.localtime()) > > str =3D str + "\n\n" > > > > print str > > > > > > > > form=3Dcgi.FieldStorage() > > > > print 'Content type: text/xml' > > print > > > > > > request =3D form["requestType"].value > > > > if request =3D=3D 'register' : > > registerUser(form); > > elif request =3D=3D 'findAllPeers' : > > findAllPeers(form) > > elif request =3D=3D 'unregister' : > > unregisterUser(form) > > > > > > > > testSearch.cgi > > > > > > #!/usr/bin/python > > > > ### a simple cgi script to allow testing of search queries > > > > > > from xml.dom.ext import PrettyPrint > > from xml.dom import minidom > > import sys > > import sys, cgi, time > > import cgitb; cgitb.enable() > > > > form=3Dcgi.FieldStorage() > > > > field=3Dform['field'].value > > keyword=3Dform['keyword'].value > > > > songs =3D minidom.parse('./sampleDB/music.xml') > > nodes =3D songs.getElementsByTagName(field) > > > > print 'Content type: text/xml' > > print > > > > > > results =3D [] > > for node in nodes : > > if node.firstChild.data =3D=3D keyword: > > results.append(node.parentNode) > > > > > > replyNode =3D songs.createElement('reply') > > typeNode =3D songs.createElement('type') > > typeNode.appendChild(songs.createTextNode('UserListReply')) > > statusNode =3D songs.createElement('success') > > statusNode.appendChild(songs.createTextNode('true')) > > dateNode =3D songs.createElement('dateTime') > > dateNode.appendChild(songs.createTextNode(time.strftime("%a, %d %b %Y > > %H:%M:%S", time.localtime()))) > > > > songNode =3D songs.createElement('songs') > > for item in results : > > songNode.appendChild(item) > > replyNode.appendChild(typeNode) > > replyNode.appendChild(statusNode) > > replyNode.appendChild(dateNode) > > replyNode.appendChild(songNode) > > > > print replyNode.toxml() > > > > > > > > =D7=EE=BA=F3=D2=BB=B6=CE=CA=C7HTTP =C7=EB=C7=F3=B5=C4=B4=FA=C2=EB > > > > > > Here is a simple program that processes HTTP requests, checks to see if= the > > request has parameters attached, and then returns 'hello world' to the > > client. > > > > In Python, you provide the BaseHTTPServer class with a handler that is > > responsible for servicing GET and POST requests. (we are only dealing w= ith > > GET in this project.) It should inherit from both CGIHTTPRequestHandler= and > > object. (see the comment for an explanation of this.) > > > > do_GET is invoked by the BaseHTTPServer whenever a GET request is recei= ved. > > This is where you'll do your work. If you like, you can invoke a separa= te > > CGI script at this point. > > > > The first thing to notice is that this DOES NOT work the way that the c= gi > > module does. In particular, stdout is not redirected back to the client= . > > Instead, self.wfile is returned to the client. So, to send back a file,= use > > self.copyfile, which is inherited from BaseHTTPRequestHandler. > > > > Also, in this code, I want to send back a string, rather than a file. I > > could write the data out to a temp file, but that's messy, so I use the > > StringIO class. It provides a String that has an associated file handle= , so > > it can be manipulated just like a file. In this case, I write to the st= ring, > > then use seek to reset the file pointer, then self.copyfile to move the > > 'file contents' onto the output stream. > > > > self.path includes everything in the URL after the hostname and port. T= his > > is where you will extract arguments. > > > > Note that, if path doesn't contain a '?', I call the superclass' do_GET > > method. The syntax for doing this is a little odd. super takes the name= of a > > type and the object to be referenced, and returns a new object of the > > superclass' type. In order for this to work, you must (indirectly) inhe= rit > > from object. > > > > self.send_header() can be used to send back any necessary HTTP headers.= Take > > a look at the BaseHTTPRequestHandler (in BaseHTTPServer) and the > > CGIHTTPRequestHandler (in CGIHTTPServer) for more usage. > > > > saddr is the host, port tuple ('' is localhost) - when starting an > > HTTPServer, you should provide a saddr and a handler. > > > > import SimpleHTTPServer, BaseHTTPServer, httplib > > from CGIHTTPServer import CGIHTTPRequestHandler > > from StringIO import StringIO > > > > > > > > ### in order for super() to work, myHandler must be a 'new-style object= ' > > ### old-style objects work like objects in C++ - they ae a classobj, ra= ther > > ### than a type. They are not required to have a superclass. > > ### although myHandler has a superclass, apparently CGIHTTPRequestHandl= er > > ### does not derive from object. > > ### To get new-style class behavior, we also derive from object. A stra= nge > > ### hack to preserve both methods of OO ... > > > > class myHandler(CGIHTTPRequestHandler,object) : > > def do_GET(self) : > > if self.path.find('?') > 0 : > > args =3D self.parsePath(self.path) > > print args > > print 'doing get' > > f=3DStringIO() > > f.write('hello wold') > > self.send_header("Content-type", "text/html") > > self.send_header("Content-Length", 11) > > self.end_headers() > > f.seek(0) > > self.copyfile(f, self.wfile) > > else : > > super(myHandler,self).do_GET() > > > > def parsePath(self, pathString) : > > args =3D pathString.split('?')[1] > > pairs =3D [s.split('=3D') for s in args.split('&')] > > pairDict =3D {} > > for item in pairs : > > pairDict[item[0]] =3D item[1] > > return pairDict > > > > > > saddr=3D("",8000) > > m=3DBaseHTTPServer.HTTPServer(saddr, myHandler) > > m.serve_forever() > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >=20 > -- > [Time is unimportant, only life important!] > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese >

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年04月07日 星期四 11:16

Zoom Quiet zoom.quiet at gmail.com
Thu Apr 7 11:16:07 HKT 2005

=BA=D9=BA=D9=BA=D9!
=CF=C8=BF=B4=D2=BB=CF=C2=D7=D3 CherryPy =BE=CD=D6=AA=B5=C0=C4=E3=CF=D6=D4=
=DA=BF=D6=BE=E5=B5=C4 Server =BD=C5=B1=BE=B5=C4=D4=CB=D0=D0=CE=CA=CC=E2,=BD=
=E2=BE=F6=B5=C4Pythonic =B7=BD=CA=BD=C1=CB!

=B9=FE=B9=FE=B9=FE!
"=C8=A5=B8=FA=D4=B6=B7=BDPeers=B9=B5=CD=A8"
=D5=E2=B8=F6=B6=AF=D7=F7,=CA=D7=CF=C8=D2=AA=D6=AA=B5=C0 "=D4=B6=B7=BDPeers"=
=B5=C4=D4=DA=C4=C4=C0=EF!
=E0=C5=E0=C5,=D5=E2=BE=CD=B1=D8=D0=EB=D2=AA=D3=D0=D2=BB=B8=F6 Peer =C1=D0=
=B1=ED=B5=C4=B7=FE=CE=F1=CC=E1=B9=A9=C1=CB,=D2=B2=BE=CD=CA=C7=C4=E3=B5=C4 S=
erver,

=B2=BB=B9=FD,=B1=F0=CD=FC=BC=C7=C1=CB,=BC=B4=C8=D5=CA=B9=CA=C7=BD=CC=D1=A7=
=CA=BE=B7=B6,
=BF=C9=D2=D4=BE=CD=CF=C8=D2=D4=C4=E3=B5=C4=BB=FA=C6=F7=CD=AC=CA=B1=D7=F7=CE=
=AA Server =BA=CD Peer =C4=C4!?

=D7=EE=BC=F2=B5=A5=B5=C4=BF=C9=D2=D4=D6=B8=B6=A8=B2=BB=CD=AC=B5=C4=B6=CB=BF=
=DA=C0=B4=C7=F8=B7=D6?
=CB=F9=D3=D0 9000 =BF=AA=CA=BC=B5=C4=B6=CB=BF=DA=CE=AA Client Peer
8999 =CE=AA=D7=A8=D3=C3=B5=C4 Server =B6=CB=BF=DA=CA=C7=D2=B2=BA=F5!

=D2=D4=C9=CF?



On Apr 7, 2005 10:52 AM, Chao Wang <xtchao at gmail.com> wrote:
> =D0=BB=D0=BB=C4=E3=B5=C4=BB=D8=B8=B4
> =B2=BB=B9=FD=CE=CA=CC=E2=C9=D4=CE=A2=D3=D0=D0=A9=C6=AB=B2=EE=A1=A3P2P=B5=
=C4=B8=C5=C4=EE=CA=C7=C3=BB=CE=CA=CC=E2=B5=C4=A1=A3=A3=BA=A3=A9
>=20
> =C4=C7=B8=F6=CB=F9=CE=BD=B5=C4Address Server=C6=E4=CA=B5=D6=BB=CA=C7=D2=
=BB=B8=F6Python=D0=B4=B3=C9=B5=C4CGI=BD=C5=B1=BE +
> =D2=BB=B8=F6=B4=E6=D3=D0=B5=B1=C7=B0=D4=DA=CF=DFPeers=B5=C4XML=CE=C4=BC=
=FE=A1=A3=B5=B1=CE=D2=B5=C4Peer=C6=F4=B6=AF=CA=B1=C4=DC=CD=A8=B9=FD=D5=E2=
=B8=F6=BD=C5=B1=BE=B0=D1=D7=D4=BC=BA=BC=D3=B5=BD=D4=DA=CF=DF=C1=D0=B1=ED=C0=
=EF=A3=AC=B2=A2=C4=DC=CD=A8=B9=FD=BD=C5=B1=BE=B2=E9=D1=AF=B5=BD=B5=B1=C7=B0=
=CB=F9=D3=D0=D4=DA=CF=DF=B5=C4Peers=A1=A3=D5=E2=B8=F6Address
> Server=B5=C4=B9=A6=C4=DC=D6=BB=D3=D0=D5=E2=D0=A9=A1=A3
>=20
> =D2=F2=CE=AA=D5=E2=B8=F6=CA=C7=D2=BB=B8=F6=BF=CE=B3=CC=C9=CF=B1=BB=B2=BC=
=D6=C3=B5=C4=CF=EE=C4=BF=A3=AC=CA=BE=B7=B6=D2=E2=D2=E5=B4=F3=D3=DA=CA=B5=BC=
=CA=D3=A6=D3=C3=D2=E2=D2=E5=A3=AC=CB=F9=D2=D4=BA=DC=B6=E0=B6=AB=CE=F7=B2=BB=
=D0=E8=D2=AA=BF=BC=C2=C7=B5=C3=C4=C7=C3=B4=B8=B4=D4=D3=A3=AC=B5=AB=D2=B2=D3=
=D0=BA=DC=B6=E0=B6=AB=CE=F7=B6=BC=D0=E8=D2=AA=B0=B4=D7=C5=B2=BC=D6=C3=B5=C4=
=D2=AA=C7=F3=D7=F7=A1=A3
>=20
> =B1=C8=C8=E7Web Service=A3=AC=CA=C7=D2=BB=B6=A8=D2=AA=D7=D4=BC=BA=D0=B4=
=B5=C4=A1=A3=B1=C8=C8=E7=D2=AA=CD=A8=B9=FD=E4=AF=C0=C0=C6=F7=C0=B4=B8=FA=D3=
=C3=BB=A7=BD=BB=BB=A5=A1=A3
>=20
> =CE=D2=C6=F0=B3=F5=B5=C4=C9=E8=BC=C6=CB=BC=C2=B7=CA=C7Peer=B5=C4Client=B9=
=A6=C4=DC=BA=CDService=B9=A6=C4=DC=B7=D6=C0=EB=A1=A3=D3=C9Web
> Service=B8=BA=D4=F0=CF=EC=D3=A6=C6=E4=CB=FBPeer=B5=C4=C7=EB=C7=F3=A3=A8=
=B0=FC=C0=A8=D4=DAAddress
> server=D7=A2=B2=E1=B7=B4=D7=A2=B2=E1=A3=A9=A3=AC=D4=D9=D3=D0=D2=BB=B8=F6=
=B6=C0=C1=A2=B5=C4Client=C8=A5=B8=FA=C6=E4=CB=FBPeers=B9=B5=CD=A8=A3=AC=CD=
=A8=B9=FD=E4=AF=C0=C0=C6=F7=C0=B4=B2=E9=D1=AF=A3=AC=CF=C2=D4=D8=A3=AC=B5=C8=
=B5=C8=A1=A3=B5=AB=CA=C7=CF=EB=C1=CB=CF=EB=A3=AC=BA=C3=CF=F1=CA=B5=CF=D6=B2=
=BB=C1=CB=A3=AC=BB=F2=D5=DF=CB=B5=A3=AC=CE=D2=B2=BB=B9=BB=BC=BC=CA=F5=C0=B4=
=CA=B5=CF=D6=A1=A3=D2=F2=CE=AA=CF=EB=B2=BB=C3=F7=B0=D7=A3=AC=D3=C3=E4=AF=C0=
=C0=C6=F7=B5=C4=BB=B0=A3=AC=CE=D2=B5=C4=B4=FA=C2=EB=B7=C5=D4=DA=C4=C4=C0=EF=
=A3=BF=CD=A8=B9=FD=CA=B2=C3=B4=B5=F7=D3=C3=D5=E2=D0=A9=B4=FA=C2=EB=A1=A3=D4=
=F5=C3=B4=B5=F7=D3=C3=A1=A3
>=20
> =BC=C8=C8=BB=C3=BB=D3=D0GUI=A3=AC=BE=CD=B5=C3=D7=C1=C4=A5=C4=DC=B8=FA=E4=
=AF=C0=C0=C6=F7=C5=E4=BA=CF=D7=C5=D3=C3=B5=C4=B6=AB=CE=F7=A1=A3=CE=D2=CF=D6=
=D4=DA=B5=C4=CF=EB=B7=A8=CA=C7=CB=F9=D3=D0=B5=C4=B4=FA=C2=EB=B6=BC=B7=C5=B5=
=BDWeb
> Service=C0=EF=A3=AC=C8=C3=D5=E2=B8=F6Service=BC=B4=C4=DC=CF=EC=D3=A6=CD=
=E2=C3=E6=C0=B4=B5=C4REST=C7=EB=C7=F3=C8=A1=CE=C4=BC=FE=C7=EB=C7=F3=A3=AC=
=D3=D6=C4=DC=CE=AA=B1=BE=BB=FA=B5=C4Client=B7=FE=CE=F1=A3=AC=B8=F9=BE=DD=B1=
=BE=BB=FA=CD=A8=B9=FDhttp://localhost/?parameter=B4=AB=B5=DD=C0=B4=B5=C4=CF=
=E0=D3=A6=B5=C4=B2=CE=CA=FD=C8=A5=B8=FA=D4=B6=B7=BDPeers=B9=B5=CD=A8=A3=AC=
=C8=BB=BA=F3=D4=D9=B4=A6=C0=ED=B9=B5=CD=A8=B5=C4=B7=B4=C0=A1XML=A3=AC=D7=EE=
=BA=F3=B4=AB=B8=F8=E4=AF=C0=C0=C6=F7=A1=A3=C4=C7=D1=F9=B8=FA=D3=C3=BB=A7=BD=
=BB=BB=A5=B5=C4Client=BF=C9=D2=D4=D6=BB=CA=C7=D2=BB=B8=F6=B5=A5=B4=BF=B5=C4=
=BE=B2=CC=ACHTML=CD=F8=D2=B3=A1=A3=B5=AB=CA=C7=CB=C6=BA=F5=D5=E2=B8=F6=B7=
=BD=B0=B8=B8=FC=B6=F1=D0=C4=A1=A3
>=20
> =C6=E4=CB=FB=B5=C4=B7=BD=B7=A8=A3=AC=B8=FC=CF=EB=B2=BB=B3=F6=C0=B4=A1=A3
>=20
> =C4=BF=C7=B0=B5=C4=C0=A7=C4=D1=D6=F7=D2=AA=BC=AF=D6=D0=D4=DA=D5=E2=C0=EF
>=20
> =CD=F5=B3=AC
>=20
> On Apr 6, 2005 6:45 PM, Zoom Quiet <zoom.quiet at gmail.com> wrote:
> > =E0=C0=E0=C0=A3=AC=C4=E3=B5=C4=D3=CA=BC=FE=CE=D2=D4=DAGmail =D6=D0=CA=
=C7=BC=D3=D0=C7=D7=A2=C3=F7=B5=C4=A3=A1
> > =CA=C7=B7=C7=B3=A3=BA=C3=B5=C4=D3=A6=D3=C3=CF=EE=C4=BF=C4=D8=A3=AC=B6=
=BC=BC=C6=BB=AE=A3=AC=C0=FB=D3=C3=C4=E3=B5=C4=B4=FA=C2=EB=D7=CA=D4=B4=C1=CB=
=A3=A1
> > =CF=D6=D4=DA=BF=B4=C0=B4=A3=AC=C4=E3=B5=C4 p2p =CA=C7=C3=BB=D3=D0=C0=ED=
=BD=E2=C7=E5=B3=FE=CB=BC=C2=B7=A3=BF=A3=A1
> >
> > =CB=F9=CE=BD P2P ,=D4=DA=CE=D2=BF=B4=C0=B4=A3=AC=CA=C7 People to People
> > =C4=C7=CE=B4=A3=AC=D5=E2=C0=EF=BE=CD=B2=BB=D3=A6=B8=C3=CB=B5=D3=D0 Cent=
er Serve =B5=C4=B6=AB=CE=F7=CA=C7=D2=B2=BA=F5=A3=BF=A3=A1
> > =E0=C0=E0=C0=A3=AC=B2=BB=B9=FD=A3=AC=D2=AA=BD=F8=D0=D0=BF=EC=CB=D9=B5=
=C4=CB=D1=CB=F7=A3=AC=B2=E9=D1=AF=A3=AC=CD=B3=D2=BB=C8=CF=D6=A4=A3=AC=BB=B9=
=CA=C7=D2=AA=D3=D0=B8=F6"=D6=D0=D0=C4=B7=FE=CE=F1"=BB=FA=D6=C6=B5=C4
> >
> > =BC=B4=A3=AC=C4=E3=CB=B5=B5=C4=D7=A2=B2=E1=A3=AC=B7=B4=D7=A2=B2=E1=A3=
=AC=BD=F6=BD=F6=D3=A6=B8=C3=CB=B5=CA=C7=BC=D3=C8=EB"P2P=D2=F4=C0=D6=B7=D6=
=CF=ED"=B5=C4=C9=F9=C3=F7=A3=A1
> > =B4=D3=D6=D0=D0=C4=B7=FE=CE=F1=C6=F7=D6=D0=BB=F1=B5=C3=CE=A8=D2=BB=B5=
=C4=B1=EA=CA=B6=A3=AC=D2=D4=B1=E3=C6=E4=CB=FC=C8=CB=BF=C9=D2=D4=D6=AA=B5=C0=
=C4=E3=BB=FA=C6=F7=B5=C4=B5=D8=D6=B7=A3=AC
> > =B6=F8=CA=B5=BC=CA=BD=F8=D0=D0=D2=F4=C0=D6=B7=D6=CF=ED=CA=B1=A3=AC=B6=
=BC=CA=C7=B5=BD=B6=D4=D3=A6=B5=C4=C3=BF=B8=F6=C8=CB=B5=C4=BB=FA=C6=F7=D7=C5=
=BD=F8=D0=D0=B5=C4=A3=BB
> > =CB=F9=D2=D4=A3=AC=C4=E3=CB=F9=CE=BD=B5=C4 Client ,=C6=E4=CA=B5=B2=C5=
=CA=C7=D5=E6=D5=FD=CC=E1=B9=A9=B7=D6=CF=ED=B7=FE=CE=F1=B5=C4=B7=FE=CE=F1=C6=
=F7=A3=A1
> >
> > =C4=C7=CE=B4=A3=AC=C4=E3=D2=AA=CF=EB=CD=A8=B5=C4=CA=C7:
> > 1. =B8=F6=C8=CB=BB=FA=C6=F7=C8=E7=BA=CE=BF=C9=D2=D4=B7=D6=CF=ED=CE=C4=
=BC=FE=B8=F8=C6=E4=CB=FC=C8=CB=A3=BF
> > 2. =B8=F6=C8=CB=BB=FA=C6=F7=C9=CF=B5=C4=D7=CA=D4=B4=C8=E7=BA=CE=BF=C9=
=D2=D4=C1=EE=CB=F9=D3=D0=C8=CB=BF=C9=D2=D4=B2=E9=D1=AF=B5=BD?
> > 3. =C8=E7=BA=CE=B1=A3=D6=A4=B8=F6=C8=CB=BB=FA=C6=F7=C9=CF=B5=C4=CE=C4=
=BC=FE=B7=D6=CF=ED=CA=C7=B0=B2=C8=AB=B5=C4=BF=C9=D0=C5=C8=CE=B5=C4?
> >
> > OK!=CD=EA=C8=AB=BF=C9=D2=D4=BD=E8=BC=F8Bt =B5=C4=CB=BC=C2=B7=CA=C7=D2=
=B2=BA=F5?!
> > =D6=C1=D3=DA=D3=D0=B7=F1GUI ,=CD=EA=C8=AB=B2=BB=D3=C3=B5=A3=D0=C4,=D6=
=BB=D2=AA=C9=E8=BC=C6=BA=CF=C0=ED,=D3=D0=D7=E3=B9=BB=BA=C3=B5=C4API =CC=E1=
=B9=A9,GUI =B2=BB=B9=FD=CA=C7=C4=A9=BD=DA,
> > =CE=D2=B5=C4=BD=A8=D2=E9=CA=C7:
> > 1. =CB=F9=CE=BD=B7=FE=CE=F1=C6=F7,=BD=F6=BD=F6=CA=C7=B7=A2=B7=C5Peer =
=D6=A4=CA=E9=B5=C4=B5=D8=B7=BD,=C1=ED=CD=E2=D2=AA=B8=BA=D4=F0=C3=BF=B8=F6Pe=
er =C9=CF=D7=CA=D4=B4=C1=D0=B1=ED=B5=C4=BB=E3=BC=AF,=B8=FC=D0=C2,=CC=E1=B9=
=A9=CB=D1=CB=F7;
> > 2. =CB=F9=CE=BD Client =D3=A6=B8=C3=CB=B5=CA=C7=B8=F6=C6=BD=CC=A8=CE=DE=
=B9=D8=B5=C4Http =B7=FE=CE=F1=CA=D8=BB=A4,=86=94=86=94=86=94!=B1=C8=C8=E7=
=CB=B5=C0=FB=D3=C3 CherryPy
> > =B5=C8=B5=C8=C7=E1=C7=C9=B5=C4Web=D3=A6=D3=C3=C6=BD=CC=A8,=C6=F4=B6=AF=
=D2=BB=B8=F6=BF=C9=D2=D4=CE=AA=CD=E2=B2=BF=B7=C3=CE=CA=B5=C4Web=D5=BE=B5=E3=
,=C0=B4=CC=E1=B9=A9=CF=C2=D4=D8;
> >
> > =D5=E2=D1=F9=D2=BB=C0=B4,=B4=F3=BC=D2=BF=C9=D2=D4=D4=DA"Client"=B5=C4=
=D5=BE=B5=E3=D6=D0=B9=DC=C0=ED=D7=D4=B8=F6=B6=F9=BB=FA=C6=F7=D6=D0=B9=B2=CF=
=ED=B5=C4=D7=CA=D4=B4,=CD=AC=CA=B1=BF=C9=D2=D4=BD=F8=D0=D0=CB=D1=CB=F7=CB=
=F9=D3=D0=B7=D6=CF=ED=C1=D0=B1=ED=D6=D0=B5=C4=CE=C4=BC=FE,=BD=F8=D0=D0=CF=
=C2=D4=D8,=B6=F8=CF=C2=D4=D8=B5=C4=BB=EE=B6=AF=CD=EA=C8=AB=BF=C9=D2=D4=CA=
=B9=D3=C3=B1=EA=D7=BC=B5=C4=C6=E4=CB=FC=D7=A8=D3=C3=CF=C2=D4=D8=B9=A4=BE=DF=
,=CA=C7=D2=B2=BA=F5?!
> >
> > (=D2=FE=BA=AC=B5=C4=B2=D9=D7=F7=CA=C7 "Client" =BD=C5=B1=BE=B5=BD "Serv=
er"=D5=BE=B5=E3=D6=D0=BD=F8=D0=D0=CB=D1=CB=F7,=D7=E9=D6=AF=CE=AA=D6=B8=CF=
=F2=B8=F7=B8=F6=BB=FA=C6=F7=B5=D8=D6=B7=B5=C4=CF=C2=D4=D8=C1=B4=BD=D3!)
> >
> > =D2=D4=C9=CF,=B2=BB=D6=AA=B5=C0=CA=C7=B7=F1=CB=B5=C7=E5=B3=FE=C1=CB
> >
> > On Apr 7, 2005 5:34 AM, wangchao <iwillipo at gmail.com> wrote:
> > >
> > > Hi Zoom,
> > >
> > >
> > > =CD=FC=BC=C7=CA=B2=C3=B4=CA=B1=BA=F2=BC=D3=B5=C3=C1=CB=A3=AC=B5=AB=C4=
=E3=D2=BB=D6=B1=D4=DA=CE=D2=B5=C4MSN=BA=C3=D3=D1=C0=EF=A3=AC=B2=BB=B9=FD=B2=
=BB=D6=AA=B5=C0=CE=D2=CA=C7=B7=F1=D4=DA=C4=E3=B5=C4=BA=C3=D3=D1=C0=EF=A3=AC=
=CE=D2=B5=C4MSN=C3=FB=D7=D6=CA=C7Chao
> > > =CE=D2=BE=CD=CA=C7=C7=B0=BC=B8=CC=EC=D4=DAPython-Cn=B5=C3maillist=C0=
=EF=B7=A2=C4=C7=B8=F6P2P=CF=EE=C4=BF=C7=F3=D6=FA=B5=C4=BC=D2=BB=EF=A1=A3
> > > =A3=BA=A3=A9=BA=F3=C0=B4=CA=D6=CD=B7=C9=CF=D3=D6=D4=DC=C1=CB=D0=A9=C6=
=E4=CB=FB=B5=C4=CA=C2=A3=AC=BE=CD=CF=C8=B0=D1=C4=C7=B8=F6=B7=C5=D2=BB=B7=C5=
=C1=CB=A1=A3=CF=D6=D4=DA=D3=D6=D2=AA=BF=AA=CA=BC=D7=F6=C4=C4=B8=F6=C1=CB=A3=
=AC=B6=F8=C7=D2=CA=B1=BC=E4=CD=A6=BD=F4=B5=C4=A3=AC=D6=BB=D3=D0=C8=FD=CB=C4=
=CC=EC=C1=CB=A1=A3
> > >
> > > =CE=D2=D4=DA=B0=D1=B5=B1=CA=B1Pythoncn=C9=CF=B5=C4=B6=AB=CE=F7copy&pa;=
ste=D2=BB=CF=C2
> > >
> > > P2P=B9=B2=CF=ED=D2=F4=C0=D6=BF=CD=BB=A7=B6=CB=CF=EE=C4=BF
> > >
> > > =BF=CD=BB=A7=B6=CB=B9=A6=C4=DC=D2=AA=C7=F3=A3=BA
> > > =D4=DA=D2=D1=BE=AD=CC=E1=B9=A9=B5=C4Address Server=C9=CF=D7=A2=B2=E1=
=D3=EB=D7=A2=CF=FA
> > > =CD=A8=B9=FDAddress Server=B2=E9=D1=AF=C6=E4=CB=FB=D4=DA=CF=DF=B5=C4P=
eers
> > > =B7=A2=CB=CD=B2=E9=D1=AF=C7=EB=C7=F3=B5=BD=C6=E4=CB=FBPeers
> > > =CF=EC=D3=A6=C6=E4=CB=FBPeers=B5=C3=B2=E9=D1=AF=C7=EB=C7=F3
> > > =B4=D3=C6=E4=CB=FBPeers=C9=CF=C7=EB=C7=F3=CE=C4=BC=FE=CF=C2=D4=D8
> > > =CF=EC=D3=A6=C6=E4=CB=FBPeers=B5=C3=CE=C4=BC=FE=CF=C2=D4=D8=C7=EB=C7=
=F3
> > >
> > > =D3=C3=E4=AF=C0=C0=C6=F7=D7=F7=CE=AA=D3=EB=D3=C3=BB=A7=BD=BB=C1=F7=B5=
=C4=BD=E7=C3=E6
> > >
> > > =C4=BF=C7=B0Address Server=D2=D1=BE=AD=CC=E1=B9=A9=C1=CB
> > >
> > > =CD=A8=B9=FD=D5=E2=D1=F9=B5=C4URI=BF=C9=D2=D4=CA=B5=CF=D6=D4=DAAddres=
s Server=C9=CF=D7=A2=B2=E1
> > >
> > > http://Server/peerdb.cgi?requestType=3Dregister&name;=3Dusername&addre;=
ss=3Dip=B5=D8=D6=B7:=B6=CB=BF=DA=BA=C5
> > >
> > > =D7=A2=B2=E1=B3=C9=B9=A6=BA=F3=A3=AC=B5=C3=B5=BD=C8=E7=CF=C2XML=BB=D8=
=B8=B4
> > > 
> > >  RegisterReply
> > >  true
> > >  Tue 8 Mar, 2005 11:01:02 
> > >  
> > >
> > > =CD=A8=B9=FDhttp://Server/~brooks/682/peerdb.cgi?requestType=3Dunregi=
ster&name;=3D
> > > =BF=C9=D2=D4=D4=DAAddress Server=C0=EF=D7=A2=CF=FA
> > >
> > > Address Server=BB=B9=D6=A7=B3=D6=D5=E2=D1=F9=B5=C4=B2=D9=D7=F7
> > > http://server/peerdb.cgi?requestType=3DfindAllPeers
> > > =BF=C9=D2=D4=B2=E9=D1=AF=B5=BD=CB=F9=D3=D0=D4=DA=CF=DF=B5=C4Peers
> > >
> > > =B5=C3=B5=BD=C8=E7=CF=C2XML=BB=D8=B8=B4
> > > 
> > >  UserListReply
> > >  true
> > >  Tue 8 Mar, 2005 11:01:02
> > > 
> > >  
> > >     liudehua 
> > >    
192.3.55.6:8000
> > > > > > > > > zhangxueyou > > >
133.66.197.2:8000
> > > > > > > > > guofucheng > > >
132.6.55.1:8000
> > > > > > > > > > > > > > > =B5=B1=D3=C3=BB=A7=CF=EB=B2=E9=D1=AF=B8=E8=C7=FA=B5=C4=CA=B1=BA=F2 > > > =B7=A2=CB=CD=C8=E7=CF=C2=C7=EB=C7=F3=B8=F8=CB=F9=D3=D0=D4=DA=CF=DF=B5= =C4Peers > > > http://otherpeers:port?requestType=3Dsearch&field;=3Dartist&keyword;=3D= zhoujielun > > > > > > Peers=BD=D3=B5=BD=D5=E2=D1=F9=B5=C4=C7=EB=C7=F3=BA=F3=A3=AC=D2=AA=B4= =D3=D7=D4=BC=BA=B5=C4XML=CA=FD=BE=DD=BF=E2=C0=EF=B2=E9=D1=AF=CA=C7=B7=F1=D3= =D0=B7=FB=BA=CF=CC=F5=BC=FE=B5=C4=B8=E8=C7=FA=A3=AC=B2=A2=B8=F8=D3=EB=CF=C2= =C3=E6=B8=F1=CA=BD=B5=C4XML=BB=D8=B8=B4=A1=A3 > > > > > > =B4=CBXML=CA=FD=BE=DD=BF=E2=B2=BB=D2=AA=C7=F3=C4=DC=CD=A8=B9=FDClient= =B8=FC=D0=C2=A3=AC=D2=B2=BE=CD=CA=C7=CB=B5=D4=DA=D2=BB=BF=AA=CA=BC=BD=A8=BA= =C3=D2=BB=B8=F6=D5=E2=D1=F9=B5=C4=CA=FD=BE=DD=BF=E2=A3=AC=B7=C5=C9=CF=BC=B8= =B8=F6=B8=E8=BE=CDOK=C1=CB=A3=AC=B8=F1=CA=BD=D2=B2=B2=BB=D3=C3=B8=FA=CF=C2= =C3=E6=B5=C4XML=D2=BB=D6=C2=A3=AC=B5=BD=CA=B1=BA=F2=CD=A8=B9=FDXSLT=D7=AA= =BB=BB=D2=BB=CF=C2=BE=CDOK > > > > > > > > > SearchReply > > > true > > > Tue 8 Mar, 2005 11:01:02 > > > > > > > > > > > > Police Truck > > > Dead Kennedys > > > Give Me Convenience Or Give Me Death > > > Punk > > > http://111.111.111.111:8080/123.mp3> > > > 16433776 > > > Mon 7 Mar, 2005 11:01:02 > > > dfsdfsdfsfdfsddfs > > > > > > ... > > > > > > > > > > > > > > > =B7=A2=B3=F6=B2=E9=D1=AF=C7=EB=C7=F3=B5=C4Peers=B0=D1=B5=C3=B5=BD=B5= =C4XML=B7=AD=D2=EB=B3=F6=C0=B4=B8=F8=D3=C3=BB=A7=D4=C4=B6=C1=A3=AC=D3=C3=BB= =A7=D1=A1=D4=F1=CF=C2=D4=D8=C4=C4=CA=D7=B8=E8=C7=FA > > > > > > =D3=C3=BB=A7=BE=F6=B6=A8=CF=C2=D4=D8=BA=F3=A3=ACPeer=B8=F9=BE=DD=C9= =CF=C3=E6XML=C0=EF=B5=C4URL=A3=AC=B7=A2=B3=F6HTTP GET=C7=EB=C7=F3=A1=A3=D4= =B6=B7=BDPeer=CF=EC=D3=A6=B4=CB=C7=EB=C7=F3=A3=AC=B0=D1=CE=C4=BC=FE=B4=AB= =B9=FD=C8=A5=A1=A3 > > > > > > =BB=F9=B1=BE=B5=C4=B9=A6=C4=DC=D2=AA=C7=F3=BE=CD=CA=C7=D5=E2=D1=F9=C1= =CB=A1=A3 > > > =D2=F2=CE=AA=D6=BB=CA=C7=B8=F6=BD=CC=D1=A7=C4=BF=B5=C4=B5=C4=CF=EE=C4= =BF=A3=AC=CB=F9=D2=D4=D5=E2=C0=EF=B2=BB=BF=BC=C2=C7Peers=BA=DC=B6=E0=B5=C4= =C7=E9=BF=F6=A3=AC=D4=DA=D5=E2=D2=BB=BC=D9=C9=E8=CF=C2=A3=AC=B7=A2=CB=CD=B2= =E9=D1=AF=C7=EB=C7=F3=B5=BD=C3=BF=B8=F6Peers=CA=C7=BF=C9=D0=D0=B5=C4 > > > > > > =C1=ED=CD=E2=A3=AC=D5=E2=C0=EF=B2=BB=BF=BC=C2=C7=D2=F2=CE=AA=B7=C0=BB= =F0=C7=BD=A3=AC=C4=DA=CD=F8=CE=DE=D3=B3=C9=E4=B5=C8=D4=AD=D2=F2=D4=EC=B3=C9= =B5=C4http=C7=EB=C7=F3=CE=DE=B7=A8=B5=BD=B4=EF=D4=B6=B7=BDPeers=B5=C4=C7=E9= =BF=F6=A1=A3 > > > > > > =B0=B4=D5=D5=D5=E2=D1=F9=D2=BB=B8=F6=C4=A3=D0=CD=A3=AC=CE=D2=B5=C4Cli= ent=C6=F4=B6=AF=B5=C4=CD=AC=CA=B1=A3=AC=D2=B2=D2=AA=D4=DA=BA=F3=CC=A8=C6=F4= =B6=AF=D2=BB=B8=F6Web service=A3=AC=D5=E2=B8=F6Service=B2=BB=B5=AB=D2=AA=C4= =DC=CF=EC=D3=A6=C6=D5=CD=A8=B5=C4HTTP > > > GET=C7=EB=C7=F3=A3=AC=BB=B9=B5=C3=C4=DC=CF=EC=D3=A6REST=C7=EB=C7=F3= =A3=AC=D4=DA=CD=F8=C9=CF=B2=E9=C1=CB=BA=DC=BE=C3=A3=AC=B6=BC=D5=D2=B2=BB=B5= =BD=CF=EC=D3=A6REST=B5=C3=D3=D0=B9=D8=B6=AB=B6=AB=A1=A3Python=D3=D0=B9=D8We= b > > > Service=B5=C3=B6=AB=B6=AB(BaseHTTPServer,CGIHTTPServer,CGIRequestHand= ler)=CB=C6=BA=F5=D2=B2=C3=BB=D3=D0=CE=C4=B5=B5=D6=A7=B3=D6 > > > > > > Service=C8=E7=B9=FB=B8=E3=B3=F6=C0=B4=A3=AC=C6=F4=B6=AF=C1=CB=D3=C0= =D4=B6=BC=E0=CC=FD=BE=CD=BA=C3=C1=CB=A3=AC=B5=AB=CA=C7Client=CB=C6=BA=F5=D3= =D0=B5=E3=C2=E9=B7=B3=A3=AC=D2=F2=CE=AA=C3=BB=D3=D0GUI=A3=AC=CD=A8=B9=FD=E4= =AF=C0=C0=C6=F7=BD=F8=D0=D0=B2=D9=D7=F7=B5=C4=BB=B0=A3=AC=CE=D2=D4=F5=C3=B4= =CA=B5=CF=D6=C6=F4=B6=AF=B0=A2=A3=BF=D3=C3=D2=BB=B8=F6Python=D0=B4=B5=C4cgi= =BD=C5=B1=BE=A3=BF=C4=C7=D1=F9=B5=C4=BB=B0=CE=D2=B5=C4Webservice=CA=C7=B2= =BB=CA=C7=BB=B9=B5=C3=C4=DC=D6=A7=B3=D6CGI=C7=EB=C7=F3=A3=AC=CE=D2=D7=DC=B2= =BB=C4=DC=B0=D1CGI=B7=C5=B5=BD=D4=B6=B7=BD=B5=C4Server=C0=EF=A3=AC=CD=A8=B9= =FD=B4=F2=BF=AA=C4=C7=B8=F6Cgi=CA=B5=CF=D6=B0=C9=A1=A3 > > > > > > =D5=E2=D0=A9=B6=BC=CA=C7=C4=BF=C7=B0=B1=C8=BD=CF=C0=A7=BB=F3=B5=C4=CE= =CA=CC=E2 > > > > > > =CF=A3=CD=FB=B5=C3=B5=BD=B8=F7=CE=BB=C5=F3=D3=D1=C3=C7=B5=C4=B0=EF=D6= =FA=A3=AC=BD=A8=D2=E9=A3=AC=B7=BD=B0=B8=BB=F2=D5=DF=D3=D0=B9=D8=BC=BC=CA=F5= =CE=C4=B5=B5 > > > > > > =D0=BB=D0=BB=A3=A1 > > > > > > =CD=F5=B3=AC > > > > > > > > > > > > > > > =D2=F2=CE=AA=CE=D2=C3=BB=D4=F5=C3=B4=D7=F6=B9=FD=BF=AA=B7=A2=A3=AC=D2= =D4=C7=B0=D7=F6=B9=FD=D7=EE=B4=F3=B5=C4=D2=BB=B8=F6=CF=EE=C4=BF=BE=CD=CA=C7= =D3=C3JSP=D0=B4=C1=CB=B8=F6=B9=A6=C4=DC=BC=B0=C6=E4=C8=F5=D6=C7=B5=C4Webmai= l=CF=B5=CD=B3=A1=A3Python=B5=C3=BE=AD=D1=E9=B8=FC=C9=D9=A3=AC=CB=F9=D2=D4= =D5=E2=B8=F6=CF=EE=C4=BF=B6=D4=CE=D2=C0=B4=CB=B5=C4=D1=B6=C8=BA=DC=B4=F3=A1= =A3 > > > > > > =BF=CF=B6=A8=CA=C7=D2=AA=D0=B4=D2=BB=B8=F6Web Service=C1=CB=A3=AC=D5= =E2=B8=F6Web service=D6=BB=D0=E8=D2=AA=CF=EC=D3=A6HTTP > > > GET=C7=EB=C7=F3=A3=AC=D2=AA=C4=DC=B9=BB=B8=F8=D4=B6=B7=BD=D3=C3=BB=A7= =B4=AB=CE=C4=BC=FE=A3=AC=BB=B9=D2=AA=C4=DC=CF=EC=D3=A6=D4=B6=B7=BD=B5=C4RES= T=C7=EB=C7=F3=B2=A2=B7=B5=BB=D8XML=A1=A3=D2=F2=CE=AAREST=C7=EB=C7=F3=D6=BB= =D3=D0=CC=D8=B6=A8=B5=C4=BC=B8=D6=D6=A3=AC=CE=D2=CF=EB=D6=BB=D2=AA=B8=F8=B4= =FA=C2=EB=C0=EF=D4=F6=BC=D3=D2=BB=D0=A9=CC=F5=BC=FE=A3=AC=B5=B1=BD=D3=CA=D5= =B5=BD=C7=EB=C7=F3=B5=C4=CA=B1=BA=F2=A3=AC=B8=F9=BE=DD=C7=EB=C7=F3=B2=CE=CA= =FD=D1=A1=D4=F1=CC=D8=B6=A8=B5=C4=B4=A6=C0=ED=B7=BD=B7=A8=BE=CD=BF=C9=D2=D4= =C1=CB=B0=C9=A1=A3Web > > > Service=CB=E4=C8=BB=CF=D6=D4=DA=BB=B9=D0=B4=B2=BB=B3=F6=C0=B4=A3=AC= =B5=AB=CA=C7=D6=C1=C9=D9=CB=BC=C2=B7=CA=C7=C7=E5=CE=FA=B5=C4=A1=A3 > > > > > > =B5=AB=D4=DA=C1=ED=CD=E2=D2=BB=B0=EB=B5=C4=BC=DC=B9=B9=C9=CF=A3=AC=CE= =D2=D2=BB=D6=B1=CF=EB=B2=BB=C3=F7=B0=D7=A3=AC=B6=F8=C7=D2=B7=C7=B3=A3=B5=C4= =C0=A7=BB=F3=A1=A3=D2=F2=CE=AA=D5=E2=B8=F6Project=CA=C7=C3=BB=D3=D0GUI=B5= =C3=A3=A8=CA=C2=CA=B5=C9=CF=A3=AC=CE=D2=D2=B2=B2=BB=BB=E1=D0=B4GUI)=A3=AC= =D2=AA=D3=C3=E4=AF=C0=C0=C6=F7=B8=FA=D3=C3=BB=A7=BD=BB=BB=A5=A3=AC=CE=D2=BE= =CD=CF=EB=B2=BB=CD=A8=B8=FA=D3=C3=BB=A7=BD=BB=BB=A5=B5=C4=B6=AB=CE=F7=D2=AA= =D4=F5=C3=B4=CA=B5=CF=D6=A1=A3=CB=FC=D2=AA=C4=DC=D4=DAAddress > > > Server=C9=CF=D7=A2=B2=E1=BA=CD=B7=B4=D7=A2=B2=E1=A3=AC=D2=AA=C4=DC=B2= =E9=D1=AFAddress > > > Server=C9=CF=CB=F9=D3=D0=D4=DA=CF=DFPeers=A3=AC=BB=B9=D2=AA=C4=DC=B8= =F9=BE=DDPeers=C1=D0=B1=ED=A3=AC=CF=F2=CB=F9=D3=D0Peers=B7=A2=CB=CD=B2=E9= =D1=AF=C7=EB=C7=F3=A3=AC=BB=B9=D2=AA=C4=DC=B8=F9=BE=DD=B2=E9=D1=AF=B5=BD=B5= =C4=B6=AB=CE=F7=A3=AC=C0=B4=CF=C2=D4=D8=A1=A3=B5=AB=D5=E2=D0=A9=A3=AC=C4=DC= =D7=F6=B5=BD=E4=AF=C0=C0=C6=F7=C0=EF=C3=B4=A3=BF > > > > > > =CE=D2=BF=C9=D2=D4=B0=D1=D7=A2=B2=E1=B7=B4=D7=A2=B2=E1=BA=CD=B2=E9=D1= =AFPeers=BC=AF=B3=C9=B5=BDWeb Service=C0=EF=A3=AC=C6=F4=B6=AF=B5=C4=CA=B1= =BA=F2=CD=EA=B3=C9=D7=A2=B2=E1=BA=CD=B2=E9=D1=AF=A1=A3 > > > =B5=AB=CA=C7=B2=E9=D1=AF=BA=CD=CF=C2=D4=D8=BF=CF=B6=A8=CA=C7=CE=D2=B5= =C4Client=B8=FA=D3=C3=BB=A7=C0=B4=BD=BB=BB=A5=C1=CB=A3=AC=D5=E2=B8=F6Client= =D4=F5=C3=B4=CA=B5=CF=D6=A3=BF=D3=C3=BF=D8=D6=C6=CC=A8=B2=BB=B4=F3=CF=D6=CA= =B5=A3=AC=D3=C3Python=D0=B4Cgi=BD=C5=B1=BE=A3=BF=D5=E2=B8=F6=BD=C5=B1=BE=B7= =C5=C4=C4=A3=BF=B7=C5=B5=BD=CE=D2=B5=C4=B1=BE=B5=D8=A3=BF=CE=D2=B5=C4Web > > > service=B2=BB=D6=A7=B3=D6=B0=A2=A1=A3=B7=C5=B5=BD=D6=A7=B3=D6Cgi=B5= =C3=D4=B6=B3=CC=B7=FE=CE=F1=C6=F7=A3=BF=BA=C3=CF=F1=B8=FC=B2=BB=D0=D0=A1=A3 > > > > > > > > > =CB=F9=D2=D4=CF=D6=D4=DA=BA=DC=D3=F4=C3=C6=A1=A3=CF=A3=CD=FB=C4=E3=C4= =DC=B0=EF=D6=FA=CE=D2=BD=E2=B4=F0=D5=E2=D0=A9=CE=CA=CC=E2=A3=AC=D0=BB=D0=BB= =A1=A3 > > > > > > > > > =CD=F5=B3=AC > > > > > > PS:=D5=E2=CF=C2=C3=E6=D3=D0=BC=B8=B6=CE=B4=FA=C2=EB=B7=D6=B1=F0=CA=C7= Address server=C0=B4=CF=EC=D3=A6=D7=A2=B2=E1=BA=CD=B2=E9=D1=AF=C7=EB=C7=F3= =B5=C4=BD=C5=B1=BE > > > =D2=BB=B8=F6=BD=C5=B1=BE=A3=AC=C4=A3=C4=E2peers=C0=B4=CF=EC=D3=A6=B2= =E9=D1=AF=B8=E8=C7=FA=B5=C4=C7=EB=C7=F3=B2=A2=B8=F8=B3=F6XML=A1=A3 > > > =BB=B9=D3=D0=D2=BB=B8=F6Web Service=B5=C4=CA=BE=C0=FD=B4=FA=C2=EB > > > > > > > > > Peerdb.cgi > > > > > > #!/usr/bin/python > > > > > > ### a simple cgi script to manage registration of peers. > > > ### requestTypes: register, findAllPeers, unregister > > > > > > from xml.dom.ext import PrettyPrint > > > from xml.dom import minidom > > > import sys > > > import sys, cgi, time > > > import cgitb; cgitb.enable() > > > > > > > > > def registerUser(form) : > > > username =3D form['name'].value > > > useraddr =3D form['address'].value > > > > > > users =3D minidom.parse('./userdb.xml') > > > > > > usernode =3D users.createElement('user') > > > namenode =3D users.createElement('name') > > > addrnode =3D users.createElement('address') > > > namenode.appendChild(users.createTextNode(username)) > > > addrnode.appendChild(users.createTextNode(useraddr)) > > > usernode.appendChild(namenode) > > > usernode.appendChild(addrnode) > > > > > > toplevel =3D users.getElementsByTagName('users')[0] > > > toplevel.appendChild(usernode) > > > > > > f =3D file('./userdb.xml','w') > > > f.write(users.toxml()) > > > f.close() > > > > > > str =3D > > > "\nRegisterReply\ntrue\n" > > > str +=3D "" + time.strftime("%a, %d %b %Y %H:%M:%S", > > > time.localtime()) > > > str =3D str + "\n\n" > > > > > > print str > > > > > > def findAllPeers(form) : > > > > > > users =3D minidom.parse('./userdb.xml') > > > replyNode =3D users.createElement('reply') > > > typeNode =3D users.createElement('type') > > > typeNode.appendChild(users.createTextNode('UserListReply')) > > > statusNode =3D users.createElement('success') > > > statusNode.appendChild(users.createTextNode('true')) > > > dateNode =3D users.createElement('dateTime') > > > dateNode.appendChild(users.createTextNode(time.strftime("%a, %d %= b %Y > > > %H:%M:%S", time.localtime()))) > > > replyNode.appendChild(typeNode) > > > replyNode.appendChild(statusNode) > > > replyNode.appendChild(dateNode) > > > > > > oldroot =3D users.getElementsByTagName('users')[0] > > > replyNode.appendChild(oldroot) > > > > > > print replyNode.toxml() > > > > > > > > > def unregisterUser(form) : > > > > > > > > > username =3D form['name'].value > > > users =3D minidom.parse('./userdb.xml') > > > u =3D users.getElementsByTagName('name') > > > for item in u : > > > if item.firstChild.data.strip() =3D=3D username.strip() : > > > #print item.firstChild.data.strip() > > > toplevel =3D users.getElementsByTagName('users')[0] > > > toplevel.removeChild(item.parentNode) > > > > > > f =3D file('./userdb.xml','w') > > > f.write(users.toxml()) > > > f.close() > > > > > > str =3D > > > "\nRegisterReply\ntrue\n" > > > str +=3D "" + time.strftime("%a, %d %b %Y %H:%M:%S", > > > time.localtime()) > > > str =3D str + "\n\n" > > > > > > print str > > > > > > > > > > > > form=3Dcgi.FieldStorage() > > > > > > print 'Content type: text/xml' > > > print > > > > > > > > > request =3D form["requestType"].value > > > > > > if request =3D=3D 'register' : > > > registerUser(form); > > > elif request =3D=3D 'findAllPeers' : > > > findAllPeers(form) > > > elif request =3D=3D 'unregister' : > > > unregisterUser(form) > > > > > > > > > > > > testSearch.cgi > > > > > > > > > #!/usr/bin/python > > > > > > ### a simple cgi script to allow testing of search queries > > > > > > > > > from xml.dom.ext import PrettyPrint > > > from xml.dom import minidom > > > import sys > > > import sys, cgi, time > > > import cgitb; cgitb.enable() > > > > > > form=3Dcgi.FieldStorage() > > > > > > field=3Dform['field'].value > > > keyword=3Dform['keyword'].value > > > > > > songs =3D minidom.parse('./sampleDB/music.xml') > > > nodes =3D songs.getElementsByTagName(field) > > > > > > print 'Content type: text/xml' > > > print > > > > > > > > > results =3D [] > > > for node in nodes : > > > if node.firstChild.data =3D=3D keyword: > > > results.append(node.parentNode) > > > > > > > > > replyNode =3D songs.createElement('reply') > > > typeNode =3D songs.createElement('type') > > > typeNode.appendChild(songs.createTextNode('UserListReply')) > > > statusNode =3D songs.createElement('success') > > > statusNode.appendChild(songs.createTextNode('true')) > > > dateNode =3D songs.createElement('dateTime') > > > dateNode.appendChild(songs.createTextNode(time.strftime("%a, %d %b %Y > > > %H:%M:%S", time.localtime()))) > > > > > > songNode =3D songs.createElement('songs') > > > for item in results : > > > songNode.appendChild(item) > > > replyNode.appendChild(typeNode) > > > replyNode.appendChild(statusNode) > > > replyNode.appendChild(dateNode) > > > replyNode.appendChild(songNode) > > > > > > print replyNode.toxml() > > > > > > > > > > > > =D7=EE=BA=F3=D2=BB=B6=CE=CA=C7HTTP =C7=EB=C7=F3=B5=C4=B4=FA=C2=EB > > > > > > > > > Here is a simple program that processes HTTP requests, checks to see = if the > > > request has parameters attached, and then returns 'hello world' to th= e > > > client. > > > > > > In Python, you provide the BaseHTTPServer class with a handler that i= s > > > responsible for servicing GET and POST requests. (we are only dealing= with > > > GET in this project.) It should inherit from both CGIHTTPRequestHandl= er and > > > object. (see the comment for an explanation of this.) > > > > > > do_GET is invoked by the BaseHTTPServer whenever a GET request is rec= eived. > > > This is where you'll do your work. If you like, you can invoke a sepa= rate > > > CGI script at this point. > > > > > > The first thing to notice is that this DOES NOT work the way that the= cgi > > > module does. In particular, stdout is not redirected back to the clie= nt. > > > Instead, self.wfile is returned to the client. So, to send back a fil= e, use > > > self.copyfile, which is inherited from BaseHTTPRequestHandler. > > > > > > Also, in this code, I want to send back a string, rather than a file.= I > > > could write the data out to a temp file, but that's messy, so I use t= he > > > StringIO class. It provides a String that has an associated file hand= le, so > > > it can be manipulated just like a file. In this case, I write to the = string, > > > then use seek to reset the file pointer, then self.copyfile to move t= he > > > 'file contents' onto the output stream. > > > > > > self.path includes everything in the URL after the hostname and port.= This > > > is where you will extract arguments. > > > > > > Note that, if path doesn't contain a '?', I call the superclass' do_G= ET > > > method. The syntax for doing this is a little odd. super takes the na= me of a > > > type and the object to be referenced, and returns a new object of the > > > superclass' type. In order for this to work, you must (indirectly) in= herit > > > from object. > > > > > > self.send_header() can be used to send back any necessary HTTP header= s. Take > > > a look at the BaseHTTPRequestHandler (in BaseHTTPServer) and the > > > CGIHTTPRequestHandler (in CGIHTTPServer) for more usage. > > > > > > saddr is the host, port tuple ('' is localhost) - when starting an > > > HTTPServer, you should provide a saddr and a handler. > > > > > > import SimpleHTTPServer, BaseHTTPServer, httplib > > > from CGIHTTPServer import CGIHTTPRequestHandler > > > from StringIO import StringIO > > > > > > > > > > > > ### in order for super() to work, myHandler must be a 'new-style obje= ct' > > > ### old-style objects work like objects in C++ - they ae a classobj, = rather > > > ### than a type. They are not required to have a superclass. > > > ### although myHandler has a superclass, apparently CGIHTTPRequestHan= dler > > > ### does not derive from object. > > > ### To get new-style class behavior, we also derive from object. A st= range > > > ### hack to preserve both methods of OO ... > > > > > > class myHandler(CGIHTTPRequestHandler,object) : > > > def do_GET(self) : > > > if self.path.find('?') > 0 : > > > args =3D self.parsePath(self.path) > > > print args > > > print 'doing get' > > > f=3DStringIO() > > > f.write('hello wold') > > > self.send_header("Content-type", "text/html") > > > self.send_header("Content-Length", 11) > > > self.end_headers() > > > f.seek(0) > > > self.copyfile(f, self.wfile) > > > else : > > > super(myHandler,self).do_GET() > > > > > > def parsePath(self, pathString) : > > > args =3D pathString.split('?')[1] > > > pairs =3D [s.split('=3D') for s in args.split('&')] > > > pairDict =3D {} > > > for item in pairs : > > > pairDict[item[0]] =3D item[1] > > > return pairDict > > > > > > > > > saddr=3D("",8000) > > > m=3DBaseHTTPServer.HTTPServer(saddr, myHandler) > > > m.serve_forever() > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > [Time is unimportant, only life important!] > > _______________________________________________ > > python-chinese list > > python-chinese at lists.python.cn > > http://python.cn/mailman/listinfo/python-chinese > > >=20 --=20 [Time is unimportant, only life important!]

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号