入門
2 b.py a.pyと手続き間のファイル転送:a.py ---------->ファイル------------> b.py
別のコンピュータの場合:コンピュータ等のネットワークディスク、QQ、2つのプログラムが通信します
ソフトウェア開発フレームワーク
二つのプログラム間の通信のアプリケーションは、大きく二つのタイプに分けられます。
最初のアプリケーションの種類:QQ、マイクロチャネル、ネットワーク・ディスク、このタイプの冷却は、デスクトップアプリケーションをインストールされます
ほとんど、ブログの公園には、ブラウザを使用してアクセスを直接使用することができます知っている、アプリケーションのBaidu:第二は、Webのカテゴリーです
これらのアプリケーションの性質は、実際には順番が対応する2つの分類の2つのソフトウェア開発のアーキテクチャには、2つのプログラム間の通信、あります
C / Sアーキテクチャ
ユーザレベルからのクライアントとサーバ、クライアント及びサーバアーキテクチャは、区分(物理レベルであることができます)
ここでは、クライアントは一般的に、クライアントアプリケーションのexeファイルを指し、プログラムは、ユーザーのコンピュータ、ユーザーのコンピュータのオペレーティング・システム環境も大きく依存上の順序の後にインストールする必要があります
B / Sアーキテクチャ
ブラウザとサーバ、中国の意味:ブラウザ側とサーバー側のアーキテクチャ、ユーザーレベルから分割されます
、クライアントのブラウザが可能なCRUDブラウザブラウザブラウザは、クライアントが実際にクライアントですが、クライアントは単にHTTP経由でブラウザサーバー関連のリソース(Webリソース)リクエストに応じて、アプリケーションをインストールする必要はありませんでしょう検索
ネットワークの基礎
特定のプログラムに各コンピュータ精密、正確なポートへのIPアドレス:別のネットワークのプログラム上のプログラムを見つける方法
IPアドレスは、インターネットプロトコルアドレスである(英語で:また、インターネットプロトコルアドレスとして翻訳インターネットプロトコルアドレスは、)略語のIPアドレスです。IPアドレスは、物理アドレスの違いをマスクするために、それをインターネット上の各ネットワークと各ホストの論理アドレスを割り当てる提供するIPプロトコルの均一なアドレス形式です。
AN IPアドレスは32ビットのバイナリ数であり、それは一般的に4つの「8ビットの2進数」(すなわち4バイト)に分割されています。IPアドレスは、B、C、Dが0である、請求、典型的には(ABCD)形態、として表現"ドット十進"で〜255の間の10進数。例:ドット付き10進IPアドレス(100.4.5.6)は、実際には32ビットのバイナリ数(01100100.00000100.00000101.00000110)です。
「ポート」は、ポートの英訳は、外の世界の輸出と通信するための通信装置と考えることができています。
OSIの7層モデル
インターネットの性質上、このプロトコルは、OSIプロトコル(契約のシリーズ)と呼ばれ、ネットワークプロトコルのシリーズです、異なる機能、労働力の異なる部門、階層7人災によると、実際には7存在しない、これは7なしコンセプトは、それを分割すると思う、目的を区別1がやっていることを理解することです
ソケットのコンセプト
ソケットはミドルウェア抽象化層、アプリケーション層、およびインターフェイスのセットが設計モードでは、通信するためにTCP / IPプロトコルスイートであり、ソケットは、実際に、ソケットインタフェースの背後に隠されているTCP / IPプロトコルスイートを担うファサードモードでありますユーザーのために、シンプルなインタフェースがすべてセットで、ソケットは、指定されたプロトコルに準拠するために、データを整理してみましょう
ソケットがモジュールであり、モジュールは、メソッド呼び出しの接続及び通信によって確立された2つのプロセス間でなされたものであり、それはまた、インターネットIPホストの場所を識別するために使用されているので、ソケットのIP +ポートと言われ、ましたこのマシンのポートのアプリケーションを表すために使用され、アプリケーションを見つけるだろう、とソケットモジュールを使用して通信するためにIPとポートを確立することが必要なだけです
ソケットファミリーのファイルタイプに基づいて、
ソケットファミリー名:AF_UNIX
UNIXのすべてがファイルで、ファイルのソケット呼び出しを同じマシン上で実行されている2つのソケットのプロセスは、データをキャプチャするために基本的なファイルシステムに基づいており、通信は、間接同じファイルシステムにアクセスすることによって行うことができます
ネットワークソケットファミリのタイプに基づいて、
ソケットファミリー名:AF_INET
すべてのアドレスファミリは、AF_INETは、最も広く使用されている、Pythonのサポート複数のアドレスファミリーであるが、我々は唯一のネットワークプログラミングを気にしているため、時間の使用のため、ほとんどはAF_INET
TCPおよびUDPプロトコル合意
TCP(伝送制御プロトコル)は、信頼性の高いコネクション型プロトコル(例:コール)で、全二重通信の伝送効率が低い(送信バッファ・キャッシュを受信する)、バイトストリームに面し、TCPアプリケーションで使用している:Webブラウザ、電子電子メール、ファイル転送プログラム
UDP(ユーザデータグラムプロトコル)信頼できない、接続サービスへのできない、高い伝送効率(小さな送信する前の遅延時間)、多対多の1、多くの1つ、メッセージの顔に1は、最大の努力をしますサービス、無輻輳制御、UDPを使用してアプリケーション:ドメインネームシステム(DNS)、ビデオストリーミングを、IP言語(VoIP)の
ソケット(ソケット)早期使用
ソケットTCPベースのプロトコル
TCPがリンクされ、それが最初にサーバーを起動し、サーバーベースのリンクにクライアントを起動する必要があります
#Severの側(サーバー側) のインポートソケット SK = socket.socket() sk.bind((' 127.0.0.1 '、8898)) #のソケットアドレスにバインド sk.listen() #のモニターリンク CONN、ADDR sk.accept =() #クライアント接続を受け入れるように RET = conn.recv(1024) #クライアント情報の受信 印刷(RET) #の印刷クライアント情報 conn.send(B ' こんにちは')#をクライアントに送信情報を CONN。使用閉じる() #近いクライアントソケット sk.close() #近いサーバソケット(別売) #(クライアント)クライアント側 のインポートソケット SKSocket.socket =() #クライアントソケットを作成 sk.connectを((' 127.0.0.1 '、8898)) #のサーバに接続しようとする試み sk.send(B ' こんにちは!' ) RET = sk.recv(1024) #の対話(送信/受信) を印刷(RET) sk.close() #近いクライアントソケット
あなたは問題が発生する可能性があり
#ソケット構成、再利用IPアドレスとポートの追加 インポートソケット からソケットのインポートSOL_SOCKET、SO_REUSEADDR SK = socket.socket() (、SOL_SOCKET、SO_REUSEADDR sk.setsockoptを。1) #は、それがバインド追加する前に、ということである sk.bind((" 127.0を.0.1 "、8898)) #ソケットにバインドされたアドレス sk.listen() #のモニタリンク CONN、ADDR = sk.accept() #クライアントのリンクを受け入れる RET = conn.recv(1024) #受信するクライアント情報の 印刷(RET) #の印刷クライアント情報 conn.send(B ' こんにちは') #クライアントに情報を送信 はconn.close() #は、近いクライアントソケットは、 ()sk.close #近いサーバソケット(オプション)
ベースのソケットUDPプロトコル
UDPは、事前にリンクを確立する必要はありませんリンクは、あなたがサービスを開始した後に直接メッセージを受け取ることができています
#Severの端部(サーバ側) のインポートソケット udp_sk = socket.socket(タイプ= socket.SOCK_DGRAMの)#サーバソケットを作成 udp_sk.bindを((' 127.0.0.1 '、9000)) #のバインドサーバソケット MSG、ADDR = udp_sk.recvfrom(1024 ) 印刷(MSG) udp_sk.sendto(B ' こんにちは'、ADDR) #の対話(受信と送信) udp_sk.close() #のクライアント(クライアント) 輸入ソケット 用ip_port =(" 127.0.0.1 '9000 ) (B udp_sk.sento ' こんにちは"、ip_port) back_msg、ADDR = udp_sk.recvfrom(1024 ) プリント(back_msg.decode(' UTF-8 ')、ADDR)
#チャットQQ インポートソケット ip_port用 =(' 127.0.0.1 '、8081)#のソケットアドレスにバインド udp_server_sock = socket.socket(はsocket.AF_INET、socket.SOCK_DGRAM) #は、サーバソケットの作成 (udp_server_sock.bindをip_port)のため#1 バインドサーバソケット つつ:真 qq_msg、ADDR = udp_server_sock.recvfrom(1024 ) 印刷(' から[%S:%s]はメッセージの:\ 033 [1; 44M%S \ 033 [0メートルを。'%(ADDR [0]、ADDR [1]、qq_msg.decode('UTF-8 ' ))) back_msg = INPUT(' 応答メッセージ:').strip() udp_server_sock.sendto(back_msg.encode(' UTF-8 ' )、ADDR) インポートsocker BUFSIZE = 1024 udp_client_socket = socket.socket(はsocket.AF_INET、socket.SOCK_DGRAM) qq_name_dic = { ' 金老板' :( ' 127.0.0.1 '、8081 )、 ' 哪吒' :( ' 127.0.0.1 '、8081 )、 ' 卵' :( ' 127.0.0.1 '、8081 )、 "元' :( ' 127.0.0.1 '8081 )} 一方TRUE: qq_name = INPUT(' とのチャットを入力してください' ).strip() 一方TRUE: MSG = INPUT(' キャリッジリターンを送信し、メッセージを入力し、入力q個の彼に話して終わり:' ).strip() IF MSG == ' 1。":BREAK IF ない MSG または 未 qq_name または qq_name ない で qq_name_dic:続行 udp_client_socket.sendtoを(msg.encode(' UTF-8 ' )、qq_name_dic [qq_name]) back_msg、ADDR = udp_client_socket.recvfrom(BUFSIZE) プリント(' 来自[%S:%S]的一条消息:\ 033 [1; 44メートル%S \ 033 [0メートル'%(ADDR [0]、ADDR [1]、back_msg.decode(' UTF-8 ' ))) udp_client_socket.close()