サーチ…


備考

(非常に)基本的なPythonクライアントソケットの例

最も単純なPythonソケットクライアント/サーバの例

サーバ側:

import socket

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('localhost', 8089))
serversocket.listen(5) # become a server socket, maximum 5 connections

while True:
    connection, address = serversocket.accept()
    buf = connection.recv(64)
    if len(buf) > 0:
        print(buf)
    break

クライアント側:

import socket

clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('localhost', 8089))
clientsocket.send('hello')

最初にSocketServer.pyを実行し、サーバーがsthを受信/受信する準備が整っていることを確認してから、クライアントが情報をサーバーに送信します。サーバーはsthを受信した後、終了します。

シンプルなHTTPサーバの作成

ローカルネットワークでファイルを共有したり、シンプルなWebサイト(httpとjavascript)をホストするために、Pythonの組み込みSimpleHTTPServerモジュールを使用することができます。 PythonはあなたのPath変数になければなりません。ファイルがあるフォルダに移動し、次のように入力します。

python 2

$ python -m SimpleHTTPServer <portnumber>

python 3

$ python3 -m http.server <portnumber>

ポート番号が指定されていない場合、デフォルトポートは8000です。出力は次のようになります。

0.0.0.0のポート8000​​でHTTPサービング

http://hostipaddress:8000/入力して、ローカルネットワークに接続されている任意のデバイスからファイルにアクセスできます。

hostipaddressはおそらく192.168.xx始まるローカルIPアドレスです。

モジュールを終了するには、単にctrl+c.押しctrl+c.

TCPサーバーの作成

socketserverライブラリーを使用してTCPサーバーを作成することができます。簡単なエコーサーバがあります。

サーバ側

from sockerserver import BaseRequestHandler, TCPServer

class EchoHandler(BaseRequestHandler):
    def handle(self):
        print('connection from:', self.client_address)
        while True:
            msg = self.request.recv(8192)
            if not msg:
                break
            self.request.send(msg)

if __name__ == '__main__':
    server = TCPServer(('', 5000), EchoHandler)
    server.serve_forever()

クライアント側

from socket import socket, AF_INET, SOCK_STREAM
sock = socket(AF_INET, SOCK_STREAM)
sock.connect(('localhost', 5000))
sock.send(b'Monty Python')
sock.recv(8192)  # returns b'Monty Python'

socketserverサーバーを使用すると、単純なTCPサーバーを比較的簡単に作成できます。ただし、デフォルトでは、サーバーはシングルスレッドであり、一度に1つのクライアントにしか対応できないことに注意してください。複数のクライアントを処理する場合は、代わりにThreadingTCPServerをインスタンス化するか、

from socketserver import ThreadingTCPServer
...
if __name__ == '__main__':
    server = ThreadingTCPServer(('', 5000), EchoHandler)
    server.serve_forever()

UDPサーバーの作成

UDPサーバーは、 socketserverライブラリーを使用して簡単に作成できます。

単純なタイムサーバ:

import time
from socketserver import BaseRequestHandler, UDPServer

class CtimeHandler(BaseRequestHandler):
    def handle(self):
    print('connection from: ', self.client_address)
    # Get message and client socket
    msg, sock = self.request
    resp = time.ctime()
    sock.sendto(resp.encode('ascii'), self.client_address)

if __name__ == '__main__':
    server = UDPServer(('', 5000), CtimeHandler)
    server.serve_forever()

テスト:

>>> from socket import socket, AF_INET, SOCK_DGRAM
>>> sock = socket(AF_INET, SOCK_DGRAM)
>>> sick.sendto(b'', ('localhost', 5000))
0
>>> sock.recvfrom(8192)
(b'Wed Aug 15 20:35:08 2012', ('127.0.0.1', 5000))

単純なHttpServerをスレッドで開始し、ブラウザを開きます

プログラムが途中でWebページを出力している場合に便利です。

from http.server import HTTPServer, CGIHTTPRequestHandler
import webbrowser
import threading

def start_server(path, port=8000):
    '''Start a simple webserver serving path on port'''
    os.chdir(path)
    httpd = HTTPServer(('', port), CGIHTTPRequestHandler)
    httpd.serve_forever()

# Start the server in a new thread
port = 8000
daemon = threading.Thread(name='daemon_server',
                          target=start_server,
                          args=('.', port)
daemon.setDaemon(True) # Set as a daemon so it will be killed once the main thread is dead.
daemon.start()

# Open the web browser 
webbrowser.open('http://localhost:{}'.format(port))


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow