Comment detail

echoクライアント (Nested Flatten)

This comment is reply for 7142 nu: 題意が分かりにくかったのでしょうか。申し...(echoクライアント). Go to thread root.

ええと、さっきのは#7138さんへのレスです。それと、コードが間違っていたので修正します。 setmode()はmsvcrtの関数でした。

「netcatのクライアント部分と同等」であるかは、netcatコマンドの仕様に詳しくないので、申し訳ありませんが何ともいえません。

echoはR.Stevensのunpvのようなネットワークプログラミングの教科書の最初のサンプルとして出てくることが多いでしょうから、その多言語版クックブックという観点を考えていました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env python
import sys
import os
import socket
from threading import Thread
import msvcrt

class Receiver(Thread):
    def __init__(self, sock):
        Thread.__init__(self)
        self.src = sock
    def run(self):
        for data in iter(lambda: self.src.recv(8192), ""):
            os.write(sys.stdout.fileno(), data)

def main(args):
    if len(args) < 3:
        print >>sys.stderr, "usage: %s host port" % args[0]
        sys.exit(1)
    if sys.platform == 'win32':
        msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
        msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((args[1], int(args[2])))
    receiver = Receiver(sock)
    receiver.start()
    for data in iter(lambda: os.read(sys.stdin.fileno(), 8192), ""):
        sock.send(data)
    sock.shutdown(socket.SHUT_WR)
    receiver.join()
    sock.close()
    return 0

if __name__ == '__main__':
    main(sys.argv)

Index

Feed

Other

Link

Pathtraq

loading...