ディレクトリ
ソフトウェア開発フレームワーク
ソフトウェア開発フレームワーク:
ソフトウェア開発は、私たちは、クライアントとサーバーのセットを開発しなければなりません
- サーバー:24時間サービス
- クライアント:検索サービス
ソフトウェア開発フレームワークは、二つのタイプに分けられます。
C / Sアーキテクチャ:
- クライアント:クライアント
- サーバー:サーバー
- たとえば、次のようにコンピュータ上の電話での栄光のQQの王、
- 長所:ソフトウェアの使用は安定しており、ネットワークリソースを節約することができます
- 短所:
- ユーザーが同じデバイス上で複数のソフトウェアを使用する場合は、複数のクライアントをダウンロードする必要があります
- 各ソフトウェア更新プログラムは、再ダウンロードし、更新を続けなければなりません
B / Sの構造:
ブラウザ:ブラウザ(クライアント)
サーバー:サーバー
例:ブラウザソフトにドメイン名を入力します
長所:ブラウザで直接使用するために必要なソフトウェアを訪問し、また、更新されたソフトウェアのバージョンをダウンロードするようにユーザーに要求することなく、複数のソフトウェアをダウンロードすることなく、クライアントのブラウザとして動作します
短所:ネットワークが不安定な場合、ネットワークリソースの過剰消費、ソフトウェアの使用が不安定になります
7層のネットワークプロトコル
学ぶことは後期
- ネットワークプログラミング - >並行プログラミング - >データベース開発 - > C / Sアーキテクチャソフトウェアの開発(シミュレーションシステムYoukuの)
- 遠位HTML / CSS / JS - >ウェブ・フレーム(NDIS /並行プログラミング) - > B /ソフトウェアアーキテクチャの開発(BBSシステム)
ネットワークプログラミング
ネットワークプログラミングの開発の歴史
- すべては、リモート、それゆえ「ネットワークプログラミング」を介してデータを取得することを期待して、高度な軍事技術から派生しています
- どのように初期のリモート通信
- コール - >電話回線
- コンピュータ - >ケーブル/ LAN
- リモート通信状態が持っている必要があります
- 物理的な接続メディア - > NIC
- コンピュータのインターネットプロトコル間の通信---メディア
インターネットプロトコル
また、7つのネットワークプロトコル、OSI 7層のプロトコルとして知られているインターネット・プロトコル、OSIは世界標準団体であります
OSI 7層のプロトコル
アプリケーション層
HTTP
FTP
プレゼンテーション層
セッション層
トランスポート層
TCP / UDPプロトコル、ポートの作業に基づいています
- ポート番号:コンピュータソフトウェアのロゴ
- ポート番号の範囲:0から65535
注意:
- オペレーティングシステム、一般的に0〜1024デフォルトのポート番号が使用され、使用することはできません
- 8000後にポート番号を使用してみてください
一般的に使用されるデフォルトのポート番号(ディクテーション)の開発:
- mysqlの:3306
- MongoDBの:27017
- ジャンゴ:8000
- Tomcatの:8080
- フラスコ:5000
- Redisの:6379
あなたは、サーバーがクライアントと通信したい場合、それは双方向チャネルで、その結果、接続を確立する必要があります
- クライアントは、サーバーにメッセージを送信し、他のメッセージを送信するためにクライアントにサーバです
ネットワーク層
- IPアドレス:一意コンピュータ(ローカルエリアネットワーク)を識別するアドレス
- IP:ドット十進
- 最小:0.0.0.0
- 最大:255.255.255.255
- IPV4 ---少しを使用しているコンピュータのIPプロトコルのバージョン番号が表示されます
- IPV6 ---拡張IP
- ネイティブIP:ループバックアドレス127.0.0.1 - >ローカルホスト
データリンク層
データリンク層「イーサネット・プロトコル」の電気信号に基づいて、特別なバイナリデータ
イーサネット・プロトコル
- 電気の良いグループの提供
- ネットワークケーブルに接続された各コンピュータには、「カード」を持っている必要があります
- NICは、異なるベンダー製:トップ6ベンダーは数を表し、シリアル番号が最後の6を表します
スイッチ:複数のコンピュータが相互に接続できます
イーサネットベースのデータを送信するためのプロトコル
- 特徴:ブロードキャスト、ユニキャスト
- 短所:ブロードキャストストームは、ローカルエリアネットワークを介して通信することはできません
インターネット
- ローカルエリアネットワーク間の通信を許可します
物理接続層
- バイナリデータを送信した電気信号に基づいて
--- TCP 3ウェイハンドシェイクプロトコルは、4つの作品を振っ--- TCPプロトコルは、ストリーミングプロトコルである---バックデータストリームに行きます
スリーウェイハンドシェイクのビルドへのリンク
双方向チャネルを確立
- 聞く:聞きます
- 設立:接続を確立するための確認要求
データを送信します
- 書く
- 読む
フィードバック機構:クライアントがサーバーにメッセージを送信し、サーバはクライアントを与える必要がありますがそれ以外の場合は、サーバが確認応答を返さない場合は常に、一定時間内に送信されたクライアントは、受信された、受信の肯定応答を返し、クライアントが送信され、メモリ内のデータのリリースをキャンセルされます
四、リンクをオフに手を振っ
- 私たちは、切断要求メッセージの受信を確認するのに対応し、サーバーが切断要求切断要求を受信したときに、クライアントを受け取った後、残りの情報の後に確認応答を送信します
TIME_WAIT:待機する時間
概要
- IP:コンピュータは、一意の位置を特定するために使用しました
- ポート:コンピュータ上のソフトウェアアプリケーションのためのポートを確認します
IP +ポート:コンピュータの世界でのソフトウェア・アプリケーション
単純にソケットを使用します
ソケットは何ですか?
- モジュールであり、あなたはソケットC / Sアーキテクチャを書くことができます
ソケットを使用するのはなぜ?--- UDPに基づくTCPベースのプロトコルを書くことができます書くことができます
- ソケットソケットプロトコル層を使用すると、開発コストを節約することができ、作業の良いパッケージになります
どのように使用するには?
import socket
サーバー
import socket
# 默认指定TCP协议
server = socket.socket() # 实例化出一个socket对象---类比成买了一个手机
# 绑定服务端ip地址---参数:ip(测试使用回环地址) + 端口(自己设置,推荐8000以外
server.bind(('127.0.0.1', 9527))
# 类比成开机,等待接听
server.listen(5) # 半连接池
# 监听是否有消息,new_server_link相当于服务端往客户端的通道
new_server_link, address = server.accept() # 返回新的服务端链接和客户端的地址,return两个值时以元组接收
print(address)
# 通过新的服务端链接接收数据并打印
data = new_server_link.recv(1024).decode('utf8') # 可以接收1024字节的数据
print(data)
# 服务端通过新的服务端链接传输确认消息
new_server_link.send(b'hello small tank , i received')
# 断开连接
new_server_link.close()
# 关闭服务器
server.close()
クライアント
import socket
# 类比成买手机
client = socket.socket()
# 往服务端拨号---参数:ip + port---寻找服务端---connect相当于客户端往服务端的通道
client.connect(('127.0.0.1', 9527))
# 客户端向服务端传输数据(二进制类型数据)
client.send('你好'.encode('utf8'))
# 客户端通过自己通道接收数据并打印
data = client.recv(1024)
print(data)
# 断开连接
client.close()
注意:クライアントとサーバーが従わなければなりません。
- 1つの送信の終わり、終わり受け、同時に、一方で送信またはrecevieすることはできませんそれ以外の場合はブロックされませんが、エラー
半周期通信ソケット接続プール+
サーバー
import socket
server = socket.socket()
server.bind(('127.0.0.1', 9527))
server.listen(5) # 半连接池---可以等待5个用户+1个正在连接的用户共6个用户
while True: # 循环服务多个客户端
new_server_link, address = server.accept() # 返回新的服务端链接和客户端的地址,return多个值时以元组接收
print(address)
try: # 客户端非正常断开连接异常处理
while True:
data = new_server_link.recv(1024).decode('utf8')
print(data)
if data == 'q':
break
msg = input('server-->client:')
new_server_link.send(msg.encode('utf8'))
new_server_link.close()
except Exception as e:
print(e)
new_server_link.close()
クライアント
import socket
client = socket.socket()
client.connect(('127.0.0.1', 9527))
while True:
msg = input('client-->server:')
client.send(msg.encode('utf8'))
data = client.recv(1024).decode('utf8')
print(data)
if msg == 'q':
break
client.close()