33日目UDPプロトコル、socketserverモジュール

UDPプロトコル

#Basicバージョン
断絶:

輸入ソケット
(型の=ソケットサーバー= socket.socket。 SOCK_DGRAM

server.bind(( '127.0.0.1'、8003))
のUDPはコネクションを確立していない、直接髪の
#がリッスンする必要はありません
サーバー=#データを。 recvfrom(1024)
データ、ADDR = server.recvfrom(1024)
#data最初のパラメータはデータの一部ではありません、2番目のパラメータはクライアントのアドレスであり、タプルである
server.sendto()data.upper(ADDR)

クライアント:
インポートソケット

(タイプ= socket.SOCK_DGRAMの)クライアント= socket.socket
直接送信された#
(b'lqz '(' 127.0.0.1」、8003))client.sendto
データ= client.recvfrom(1024)
印刷(データ)


#加入通信循环
サーバ:
インポートソケット
サーバ= socket.socket(タイプ= socket.SOCK_DGRAM)
server.bind(( '127.0.0.1'、8003))

一方TRUE:
データ、ADDR = server.recvfrom(1024)
server.sendto (data.upper()、ADDR)

クライアント:
輸入ソケット
クライアント= socket.socket(タイプ= socket.SOCK_DGRAM)
しばらく真:
  MSG =入力( '>>')
    直接送信#
(msg.encode( 'UTF-8')、( '127.0.0.1'、8003))client.sendto
データ= client.recvfrom(1024)


スティックパッケージ#udpかどうか
UDPの特徴:
-あなたは(鉛いるので、データグラムプロトコル)、空を送ることができます
-クライアントとサーバは、パーティラインを持つことができません(接続が確立されていないため)
UDPプロトコルは空ではなく、TCPを送信することができ、パッケージ上の問題(データグラムプロトコルと呼ばれるUDPプロトコル)に固執しません


socketserverモジュール
モジュールsocketseverによっては、サーバー側書き込むための

#tcp契約

クライアント
のインポートソケットを
SOC = socket.socket()
soc.connect(( '127.0.0.1'、8009))
一方TRUE:
soc.send( 'xxxx'.encode(' UTF-8' ))
プリント(soc.recv(1024))

サーバーの
インポート socketserver
#BaseRequestHandler継承する必要があり、自分自身のクラスを定義します
(SocketServer.BaseRequestHandlerの)クラスMyTcpを:
#メソッドを書き換える必要がありますハンドル
DEFハンドル(セルフ):
試してみる:
しばらく真:#通信サイクル
#印刷(セルフ)
#メッセージをバッククライアントに
#connオブジェクトは、要求され
たデータ受信#
印刷(self.client_addressです)
データ= self.request.recv(1024)
プリント(データ)
IF LEN(データ)== 0:
リターン
#送信データ
self.request.send(data.upper() )
例外を除い:
渡し
IF __name__ == '__main__':
#TCPは、接続オブジェクトが取得されるインスタンス、スレッドがあれば要求に、インタラクションデータに関連処理に自動的にオープンスレッドとして、ことを意味する
#を最初の引数が結合のアドレスであり、2番目のパラメータはクラスパス
サーバsocketserver.ThreadingTCPServer =(( '127.0.0.1'、8009)、MyTcpは)
# '聴いてまし
理解して#を:糸(人工は、インタラクティブな操作を行う)から、限り要求としても
server.serve_forever()
#udp协议
クライアント
輸入ソケット
クライアント= socket.socket(タイプ= socket.SOCK_DGRAM)
client.sendto( 'lqz'.encode(' UTF-8 ')、(' 127.0.0.1' 、8009))
#1 client.sendto( 'hello'.encode(' UTF-8 ')、(' 127.0.0.1 」、8009))
#1 client.sendto( 'world'.encode(' UTF-8 ')、(' 127.0.0.1' 、8009))
#1 client.sendto( ''。(エンコード'' UTF-8)、 ( '127.0.0.1'、8009))
データ= client.recvfrom(1024)
印刷(データ)

サーバー
のインポートSocketServer

#クラスの独自の定義は、BaseRequestHandler継承しなければなりません
(SocketServer.BaseRequestHandlerの)クラスMyTcpを:
#は、handleメソッドを書き換える必要があり
DEF(セルフ)を処理:
印刷(セルフ)
#データ
を印刷(self.request [0])
を印刷(セルフ[1] .request)
印刷(タイプ(self.request [1]))
self.request .sendto( 'xxxx'.encode(' UTF-8「)、self.client_addressです)[1。]
#試し:
#しばらく真:通信サイクル#
#= self.request.recvfromデータ(1024)
プリント(データ)
#例外を除い:
#パス


__name__ ==「__main__」の場合:
#は接続TCPを取得するオブジェクトをインスタンス化し、スレッドは、その限り手段リクエストに、それが自動的に開いているスレッドインタラクティブデータとの接続を処理します
#最初の引数が結合のアドレスは、2番目のパラメータは、クラスパス
socketserver.ThreadingUDPServer =((「127.0.0.1」、8009)、MyTcp)サーバ
#監視して
)(server.serve_forever
 
 
 

おすすめ

転載: www.cnblogs.com/wwei4332/p/11493968.html