ソケットとは
コンピューターは、その名前が示すように、計算に使用されます。そのため、計算が必要な条件を入力し、計算結果を出力する入出力も必要となります。これらの入出力はI/O(入出力)として抽象化できます。
Unix コンピューターは、ファイルの抽象化を通じて IO を処理します。入出力、つまり異なるコンピュータープロセス間の通信もあります。したがって、この通信もファイルの抽象ファイル記述子を通じて実行されます。
同じコンピューター上で、プロセスはこのように通信できます。異なるコンピューターの場合はどうなるでしょうか?ネットワーク上のさまざまなコンピュータも通信できるため、ネットワーク ソケットを使用する必要があります。ソケットは、異なるコンピューター間の通信を抽象化したものです。彼は、TCP/IP プロトコルのアプリケーション層とトランスポート層の間の抽象化に取り組んでいます。以下に示すように:
サーバー通信
ソケットは、異なるコンピュータ間の通信、つまりネットワーク通信を保証します。 Web サイトの場合、通信モデルはクライアント/サーバー通信です。両端はソケット オブジェクトを確立し、ソケット オブジェクトを通じてデータを送信します。通常、サーバーはワイヤレス ループ内でクライアントの接続を待機しています。
ソケット通信例
ソケットインターフェースはオペレーティングシステムによって提供され、オペレーティングシステムを呼び出すためのインターフェースです。もちろん、高級言語は通常、便利な関数インターフェイスをカプセル化します。これは、Python コードを使用した単純なソケット サーバーの例です。
リーリー
リーリー
TCP スリーウェイ ハンドシェイク
Python コードでソケットを記述するのは簡単です。伝説の TCP スリーウェイ ハンドシェイクはどのように具体化されるのでしょうか?スリーウェイハンドシェイクとは何ですか?
3 番目のステップ: サーバーから応答を受信した後、クライアントは接続を確立するためにサーバーに確認を送信します。
次の比喩を使用してください
C: 予約を取りますか?
S:
についてC: わかりました
デート
これにより、TCP 接続セッションが確立されます。切断したい場合の一般的なプロセスは次のとおりです:
上の写真は、スリーウェイ ハンドシェイク ソケットの具体的なプロセスも明確に示しています。
connect を呼び出した後、クライアント ソケット オブジェクトはブロックされます。このプロセスは syn を送信します。
- サーバーソケットオブジェクトは、accept 関数を呼び出した後、クライアントから syn が送信されるまでブロックし、その後 syn 応答と ack 応答を送信します
- クライアント ソケット オブジェクトは、サーバーから送信された応答を受信した後、サーバーに ack を送信し、connect 呼び出しを返して接続を確立します。
- サーバーソケットオブジェクトはクライアントの最後のハンドシェイクを受け入れ、ackを確認し、accept関数を返し、接続を確立します。
- この時点で、クライアントとサーバー間のソケット通信接続が確立され、残りは両端の接続オブジェクトがデータを送受信してネットワーク通信を完了します。
単純な HTTP サービスを構築するには、HTTPServer を継承する必要があり、リクエストハンドラーも BaseHTTPRequestHandler を継承する必要があります。 Python は SimpleHTTPServer という例を実装しています。したがって、SimpleHTTPServer を分析して、以前のクラスのいくつかを使用して http サービスを構築する方法を確認します。
Python のシンプルさと優雅さを示すために、Python では 1 行のコードでサーバーを起動できる例がよく挙げられました。
リーリー
SimpleHTTPServer は、BaseHTTPServer モジュールのテスト メソッドをエントリ ポイントとして使用します。
リーリー
前の分析によると、httpserver サービスを使用するには、BaseHTTPRequestHandler を継続し、イントロスペクション メソッドを提供するだけで済みます。
リーリー
リーリー
do_GET の次のステップは、顧客が要求したパスのファイル データを、copyfile メソッドを通じてバッファされた書き込み可能なファイルに書き込み、クライアントに送信することです。 3.list_directory 由此可见,处理客户端的请求,只需要使用 send_reponse, send_header 和 end_headers ,就能向客户端发送reponse。 4.自定义http服务 然后再定义一个CustomHTTPServer继承自HTTPServer,它接受CustomHTTPRequestHadnler作为自己的handler。简单的代码如下: 使用curl访问可以得到 控制台会打出访问的log。 从socket的建立,select的IO模式,再到Server和Handler的组合构建服务。我们已经熟悉了python的基本网络编程。python的web开发中,更多是使用WSGI协议。实现该协议的还有 uWSGI和gunicorn等库。相比那些库,python内部提供了一个wsgiref模块,实现了一个简单wsgi服务--simple_server。 接下来将会通过分析simple_server,更好的掌握WSGI协议。
SimpleHTTPServer模块还提供了list_directory方法,用于响应path是一个目录,而不是文件的情况。
def list_directory(self, path):
try:
list = os.listdir(path)
except os.error:
self.send_error(404, "No permission to list directory")
return None
list.sort(key=lambda a: a.lower())
f = StringIO()
displaypath = cgi.escape(urllib.unquote(self.path))
f.write('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">')
f.write("<html>\n<title>Directory listing for %s</title>\n" % displaypath)
f.write("<body>\n<h2 id="Directory-listing-for-s">Directory listing for %s</h2>\n" % displaypath)
f.write("<hr>\n<ul>\n")
for name in list:
fullname = os.path.join(path, name)
displayname = linkname = name
# Append / for directories or @ for symbolic links
if os.path.isdir(fullname):
displayname = name + "/"
linkname = name + "/"
if os.path.islink(fullname):
displayname = name + "@"
# Note: a link to a directory displays with @ and links with /
f.write('<li><a href="%s">%s</a>\n'
% (urllib.quote(linkname), cgi.escape(displayname)))
f.write("</ul>\n<hr>\n</body>\n</html>\n")
length = f.tell()
f.seek(0)
self.send_response(200)
encoding = sys.getfilesystemencoding()
self.send_header("Content-type", "text/html; charset=%s" % encoding)
self.send_header("Content-Length", str(length))
self.end_headers()
return f
定义一个CustomHTTPRequestHadnler继承自BaseHTTPRequestHandler。在其内实现do_GET 方法来处理get请求。
# -*- coding: utf-8 -*-
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
class CustomHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write("hello world\r\n")
class CustomHTTPServer(HTTPServer):
def __init__(self, host, port):
HTTPServer.__init__(self, (host, port), CustomHTTPRequestHandler)
def main():
server = CustomHTTPServer('127.0.0.1', 8000)
server.serve_forever()
if __name__ == '__main__':
main()
➜ ~ curl http://127.0.0.1:8000
hello world
➜ ~
127.0.0.1 - - [01/Jun/2015 11:42:33] "GET / HTTP/1.1" 200 -

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

WebStorm Mac版
便利なJavaScript開発ツール
