ホームページ >バックエンド開発 >Python チュートリアル >Python ネットワークプログラミング TCP 通信例とソケットサーバーフレームワークの使用例

Python ネットワークプログラミング TCP 通信例とソケットサーバーフレームワークの使用例

WBOY
WBOYオリジナル
2016-06-16 08:44:291181ブラウズ

1.TCP は、一方がデータを送信する前に、2 つの当事者間で接続を確立する必要があり、通信が完了した後、接続を 4 回切断する必要があります。 TCP のハーフクローズによって発生するハンドシェイク。一方の当事者がデータの送信を完了した後、この方向の接続を終了するために FIN を送信する必要がありますが、アプリケーションは FIN を受信した後もデータを送信できます。これはめったに行われません。TCP 接続の確立と切断のプロセスは次のとおりです。

Python ネットワークプログラミング TCP 通信例とソケットサーバーフレームワークの使用例Python ネットワークプログラミング TCP 通信例とソケットサーバーフレームワークの使用例

2. Python は TCP サーバーとクライアントのプログラミングを実装できます。

サーバー側:

コードをコピーします コードは次のとおりです:

#!/usr/bin/env python
インポート ソケット
host ="localhost"
port=10000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen( 5)
while 1:
sock,addr=s.accept()
print "接続フォームを取得しました",sock.getpeername()
data=sock.recv(1024)
ifデータではない:
ブレーク
それ以外の場合:
データを印刷

クライアント:

コードをコピー コードは次のとおりです:

#!/usr/bin/env python
インポートソケット
host="localhost"
port=10000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
s .send("クライアントからこんにちは")
s.close()

3. ソケットサーバーフレームワークを使用して TCP サーバーを作成します

Socketserver モジュールには、4 つのサーバー クラスが含まれています。TCPServer は TCP プロトコルを使用し、UDPServer は UDP プロトコルを使用します。また、あまり一般的ではない 2 つのクラス、つまり UnixStreamServer と UnixDatagramServer のみが使用されます。 UNIX 環境で便利です。

サーバー プログラミングを使用するには、まず、BaseRequestHandler クラスを継承するリクエスト ハンドル クラスを作成し、そのハンドル メソッドを書き換えてサーバー クラスを追加します。ホスト名、ポート番号、ハンドル クラスが渡され、server_forever() メソッドが呼び出されてリクエストを処理します。

ソケットサーバーフレームワークを使用するサーバー:

コードをコピー コードは次のとおりです:

import SocketServer
host=''
port=10000
class Handler(SocketServer.StreamRequestHandler):

def handler(self):
addr=self.request.getpeername()
print "接続を取得しました",addr
self .wfile.write("connected")

server=SocketServer.TCPServer((host,port),Handler)
server.serve_forever()

上記のソケットサーバーサーバーは 1 つのリクエストのみを処理できます。複数のリクエストを処理したい場合は、フォークまたはスレッドを使用してマルチプロセスまたはマルチスレッドサーバーを実装できます。フォークとスレッドを使用するサーバー コードは次のとおりです:

フォークサーバーを使用します:

コードをコピー コードは次のとおりです。

from SocketServer import TCPServer,ForkingMixIn,StreamRequestHandler
class Server(ForkingMixIn ,TCPServer) :pass
class Handler(StreamRequestHandler):

def handle(self):
addr=self.request.getpeername()
print "接続を取得しました",addr
self .wfile.write('connected')

server=Server((''.10000),Handler)
server.serve_forever()

マルチスレッドサーバーを使用します:

コードをコピー コードは次のとおりです。

from SocketServer import TCPServer,ThreadingMixIn,StreamRequestHandler
class Server(ThreadingMixIn ,TCPサーバー) :pass

class Handler(StreamRequestHandler):
def handle(self):
addr=self.request.getpeername()
print "接続元",addr
self.wfile.write( "接続済み")

server=Server(('',10000),Handler)
server.serve_forever()

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。