Changes between Version 82 and Version 83 of Pythonの短いソースコード集


Ignore:
Timestamp:
09/20/06 01:17:05 (13 years ago)
Author:
nakiki
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Pythonの短いソースコード集

    v82 v83  
    77 
    88''ちょっと長すぎるので、複数ページに分離しましょうよ。--sgk'' 
    9  
     9  * ただいま分類中・・ --nakiki 
    1010 * [wiki:数値と文字列] 
    1111 * [wiki:ネットワーク] 
     
    216216print child_stdout.read() 
    217217}}} 
    218  
    219  
    220 == ソケット.TCPクライアント == 
    221 {{{ 
    222 #!python 
    223 import socket 
    224  
    225 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    226 sock.settimeout(10) 
    227 try: 
    228   r = sock.connect(('127.0.0.1', 12345)) 
    229   sock.send('test message') 
    230 except socket.error, e: 
    231   print 'Error: %s' % e 
    232 }}} 
    233  
    234 == ソケット.TCPサーバ == 
    235 {{{ 
    236 #!python 
    237 import socket 
    238  
    239 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    240 sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    241 sock.bind(('127.0.0.1', 12345)) 
    242 sock.listen(1) 
    243 try: 
    244   while True: 
    245     (conn, sa) = sock.accept() 
    246     msg = conn.recv(8192) 
    247     print msg 
    248     conn.close() 
    249 except socket.error, e: 
    250   print 'Error: %s' % e 
    251 }}} 
    252  
    253 == ソケット.TCPサーバ == 
    254 {{{ 
    255 #!python 
    256 import SocketServer 
    257  
    258 class Handler(SocketServer.StreamRequestHandler): 
    259   def handle(self): 
    260     while True: 
    261       line = self.rfile.readline() 
    262       if len(line) == 0: 
    263         return 
    264       self.wfile.write(line) 
    265  
    266 server = SocketServer.TCPServer(('127.0.0.1', 12345), Handler) 
    267 print 'listening:', server.socket.getsockname() 
    268 server.serve_forever() 
    269 }}} 
    270  * pythonの標準のものを使うともっとスマート。スレッド動作させるクラスもあるよ。 
    271  
    272 == UDPクライアント == 
    273 {{{ 
    274 #!python 
    275 try: 
    276   sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    277   sock.sendto('test message', ('localhost', 12345)) 
    278 except socket.error, e: 
    279   print 'Error: %s' % e 
    280 ~ 
    281 }}} 
    282 == RPCサーバ == 
    283 {{{ 
    284 #!python 
    285 import SimpleXMLRPCServer 
    286  
    287 class Test: 
    288   def inc1(self, value): 
    289     return value + 1 
    290  
    291   def inc2(self, value): 
    292     return value + 2 
    293  
    294   def inc3(self, value): 
    295     return value + 3 
    296  
    297 if __name__ == '__main__': 
    298   server = SimpleXMLRPCServer.SimpleXMLRPCServer(('127.0.0.1', 12346)) 
    299   server.register_instance(Test()) 
    300   server.serve_forever() 
    301 }}} 
    302  * 関数呼び出しのイメージで処理が進められるので便利。 
    303  * 特別なプロトコル自分で作る必要がない。 
    304  * '''練習問題:''' このサーバを起動して、一度だけRPCクライアントとの通信後サーバを`^C`で終了させてその直後にサーバをまた起動するとソケットがまだバインドされているというエラーがでてすぐに起動できない。さてどう改造したらうまく行くのでしょうか? 
    305  
    306 == RPCクライアント == 
    307 {{{ 
    308 #!python 
    309 import xmlrpclib 
    310  
    311 server = xmlrpclib.ServerProxy('http://127.0.0.1:12346') 
    312 print server.inc1(1) 
    313 print server.inc2(1) 
    314 print server.inc3(1) 
    315 }}} 
    316  * 関数を呼ぶだけです。 
    317218 
    318219== データの連結 ==