day26の概要

ソフトウェア開発フレームワーク

  1. ソフトウェア開発フレームワーク:

    • ソフトウェア開発は、私たちは、クライアントとサーバーのセットを開発しなければなりません

      • サーバー:24時間サービス
      • クライアント:検索サービス
    • ソフトウェア開発フレームワークは、二つのタイプに分けられます。

      • C / Sアーキテクチャ:

        • クライアント:クライアント
        • サーバー:サーバー
        • たとえば、次のようにコンピュータ上の電話での栄光のQQの王、
        • 長所:ソフトウェアの使用は安定しており、ネットワークリソースを節約することができます
        • 短所:
          • ユーザーが同じデバイス上で複数のソフトウェアを使用する場合は、複数のクライアントをダウンロードする必要があります
          • 各ソフトウェア更新プログラムは、再ダウンロードし、更新を続けなければなりません
      • B / Sの構造:

        • ブラウザ:ブラウザ(クライアント)

        • サーバー:サーバー

        • 例:ブラウザソフトにドメイン名を入力します

        • 長所:ブラウザで直接使用するために必要なソフトウェアを訪問し、また、更新されたソフトウェアのバージョンをダウンロードするようにユーザーに要求することなく、複数のソフトウェアをダウンロードすることなく、クライアントのブラウザとして動作します

        • 短所:ネットワークが不安定な場合、ネットワークリソースの過剰消費、ソフトウェアの使用が不安定になります

7層のネットワークプロトコル

学ぶことは後期

  • ネットワークプログラミング - >並行プログラミング - >データベース開発 - > C / Sアーキテクチャソフトウェアの開発(シミュレーションシステムYoukuの)
  • 遠位HTML / CSS / JS - >ウェブ・フレーム(NDIS /並行プログラミング) - > B /ソフトウェアアーキテクチャの開発(BBSシステム)

ネットワークプログラミング

  • ネットワークプログラミングの開発の歴史

    • すべては、リモート、それゆえ「ネットワークプログラミング」を介してデータを取得することを期待して、高度な軍事技術から派生しています
    • どのように初期のリモート通信
      • コール - >電話回線
      • コンピュータ - >ケーブル/ LAN
    • リモート通信状態が持っている必要があります
      1. 物理的な接続メディア - > NIC
      2. コンピュータのインターネットプロトコル間の通信---メディア
  • インターネットプロトコル

    • また、7つのネットワークプロトコル、OSI 7層のプロトコルとして知られているインターネット・プロトコル、OSIは世界標準団体であります

    • OSI 7層のプロトコル

      • アプリケーション層

        HTTP

        FTP

      • プレゼンテーション層

      • セッション層

      • トランスポート層

        TCP / UDPプロトコル、ポートの作業に基づいています

        • ポート番号:コンピュータソフトウェアのロゴ
        • ポート番号の範囲:0から65535

        注意:

        • オペレーティングシステム、一般的に0〜1024デフォルトのポート番号が使用され、使用することはできません
        • 8000後にポート番号を使用してみてください

        一般的に使用されるデフォルトのポート番号(ディクテーション)の開発:

        あなたは、サーバーがクライアントと通信したい場合、それは双方向チャネルで、その結果、接続を確立する必要があります

        • クライアントは、サーバーにメッセージを送信し、他のメッセージを送信するためにクライアントにサーバです
      • ネットワーク層

        • IPアドレス:一意コンピュータ(ローカルエリアネットワーク)を識別するアドレス
        • IP:ドット十進
          • 最小:0.0.0.0
          • 最大:255.255.255.255
        • IPV4 ---少しを使用しているコンピュータのIPプロトコルのバージョン番号が表示されます
        • IPV6 ---拡張IP
        • ネイティブIP:ループバックアドレス127.0.0.1 - >ローカルホスト
      • データリンク層

        • データリンク層「イーサネット・プロトコル」の電気信号に基づいて、特別なバイナリデータ

        • イーサネット・プロトコル

          1. 電気の良いグループの提供
          2. ネットワークケーブルに接続された各コンピュータには、「カード」を持っている必要があります
            • 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()

おすすめ

転載: www.cnblogs.com/-406454833/p/11714603.html