いくつかの概念
ソケット:
ソケット(ソケット)は、また、通信のエンドポイントとして知られている、もともとコンピュータの内部プロセス間通信のために使用され、ネットワークの発展に伴い、ソケットは、コンピュータ間の通信に使用されます。たとえば、(コンピュータ)がお友達に(別のコンピュータ)、あなたの友人の電話番号だけで行うことはできませんが、また卓上電話を呼び出すために、これは電話ソケットに相当します言葉。
ネットワークに基づいてファイルを、ベースの2つのソケットがあります。ファイルに基づいて、単に通信のプロセスとして理解することができ、それは単に、コンピュータ間の通信のためのベースのネットワークを理解することができます。それはPythonのネットワークプログラミング、AF_INET(使用のIPv4)の最初の焦点であるため、そして、彼らは...そのようAF_UNIX、AF_INETなど、さまざまなアドレスファミリ(アドレスファミリ、抽象名)、に分けました。
金額...概念、接続指向とコネクションレスのソケットがあります。ソケットタイプを提供する接続のTCPは、SOCK_STREAM、UDP、ソケットタイプSOCK_DGRAMとコネクションレスです。
C / Sのシンプルなソケット
ときsocketserverは現在、一般的に開発するために使用されるが、私はソケットから学習を開始するためにいくつかの簡単なスクリプトを書くことを決めたので、私は初心者です。
基本的な通信ソケットのシミュレートC / S建設との最初の。最初は、最初の練習にTCPとUDPサーバ、TCPに分け、もちろん、サーバー側です。TCPサーバとして、我々は最初のクライアントからの接続を待つ必要があります。そして、クライアントへの接続、そして最終的に通信するためのクライアントを確立します。ソケット私たちは財産を必要とする理由である、ここに記載されているいくつかの共通の属性である、多くの属性を持っています。
socket(family,type,proto)
アドレスファミリは、家族で、我々はデフォルトですもちろんのAF_INET、、、我々は最後ビーイング少ないプロト引数より、デフォルトでSOCK_STREAMを、使用タイプを使用し、考慮されていません。
bind(address)
この方法は、サーバ側を結合するために使用ip
し、port
あなたがする必要があるので、それだけで、一つのパラメータを取りますip
し、port
合格するタプルとしてパッケージ化。
listen()
サーバーの起動時のリスニングを開始する方法
accept()
クライアントが接続を要求した場合、クライアントの接続要求のための方法を待つは、方法は、接続オブジェクトを生成し、オブジェクトとクライアントがip
戻り値として返されます。接続オブジェクトが作成されると、サーバーとクライアントが対話を開始することができます。もちろん、ときaccept()
オブジェクトを作成したら、それはときに、新しい接続の到着過程を繰り返すことになります、新しい接続を待つために元の状態に戻ります。
recv(buffer)
データを受信するための方法は、buffer
受信したデータのサイズです。にもちろん、データの種類bytes
send(bytes)
また送信データ、送信bytes
非常に多くの先例について、NBの名前から、人生は儀式の感覚を必要とする、以下の最初のプログラムを開始しました Binary_TCPserver_V1
#Binary_TCPserver_V1の インポートソケット からの時間インポートCTIMEの サーバー = socket.socket() server.bind((" ローカルホスト"、6969 )) server.listen() #聞き始め プリントを(' 接続を待っている... ' ) でCONN、ADDR =サーバー.accept() #で...接続を待つ #と表す接続とIPアドレスを返す データ= conn.recv(1024 ) 印刷(「サーバーreciveデータ:」、データ) conn.send(B ' [%S]%sは'%(データ、CTIME()。エンコード(' UTF-8 ' )))# がタイプしないSTRバイト送信 server.closeを()
私たちは、クライアントからのデータのセットを受信し、データに加えて、現在の時刻を返し、一度、クライアントとの対話の終了後に完全なAの接続要求を受け取り資格のサーバープログラムではない、そしてサーバーがに想定されていないことは明らかです終了します。しかし、プログラムロジックを試すためにそれをビットをやりとりするための簡単なクライアントを書き込み、正しいです。
#Binary_TCPclinet_V1の インポートソケット clinet = socket.socket() clinet.connect((' ローカルホスト'、6969 )) SEND_DATA =入力(' >>:') #のタイプは、文字列である clinet.send(send_data.encode(' UTF-8 ')) #の変化型バイト データ= clinet.recv(1024) # BUFFERSIZE 1024バイト プリント(" Clinet reciveデータ:" 、data.decode()) clinet.close()
サーバーを実行し、クライアント、クライアントのリターンを実行するには
>> :私はバイナリだ
Clinet reciveデータを:月12月[私はバイナリ午前] 9夜05時06分41秒2019
サーバが返します
接続...待っている B:サーバーreciveデータを「私はバイナリです」
私たちは、単純な相互作用を達成したことを参照してください、しかし、クライアントは、サーバから返され、その後、今の会話を終えた単語を言うことはできません。私たちは、サーバーがダウンして実行されている、クライアントは接続のそれを言って終了していない、その後十分と言っ欲しいです。上のBinary_TCPserver_V2
一方、真: 印刷(「接続を待っている... 」) でCONN、ADDR = server.accept()# はで...接続を待つ #と表す接続とIPアドレスを返し ながら、:真の データ = conn.recv(1024 ) の場合 ではないデータ: 印刷(' clinetが接続を壊れた... ' ) ブレーク プリント(" サーバーreciveデータ:" 、データ) conn.send(B " [%s]は%sの'%(データ、CTIME()。エンコード(' UTF-8 '))) #がタイプしないSTRバイト送信 server.closeを()
実際には、それは2つのサイクル、クライアントコード、インタラクティブ塗りつぶしの種類の添加があります。
#Binary_TCPclinet_V1の 輸入ソケット clinet = socket.socket() clinet.connect((' localhostの'、6969 )) しばらく真: SEND_DATA =入力(' >>:') #の型が文字列である 場合 ではないSEND_DATA: ブレーク clinet.send(SEND_DATA .encode(' UTF-8 ')) #の変化型バイト データ= clinet.recv(1024) # BUFFERSIZE 1024バイト 印刷("Clinet reciveデータ:" 、data.decode()) clinet.close()
テスト、クライアント
>> :私はバイナリだ Clinet reciveデータを:月月[私はバイナリ午前] 9夜06時15分50秒2019 >> 私はハンサムだ: Clinet reciveデータを:月月[私はハンサムだ] 9午後六時15分58秒2019 >> :
サーバー側
接続...待っている サーバーreciveデータ:bは「私はバイナリだ」 サーバーreciveデータ:B 「私はハンサムだ」 clinetは...接続が壊れた 接続を待っています...
私たちは基本的にシングルスレッドのサーバーを持っていることがわかり、これは確かに究極の目標ではありません。この財団と、あまりにもそこにソケット上のコンテンツの多くはありませんでしょうもつれません。我々は入るようになったsocketserver
、これは究極の目標です。