ネットワークプログラミング(一)基礎知識
4214 ワード
1.1 Tcpデータ送信
マシンAからマシンBに送ると、
データ送信は多くのパケットに分解され、マシンBになると、マシンBが再合成されます.送信中、受信者にパケットを受信していないことを要求し、フィードバック情報が必要であり、フィードバックがなければ、tcpは自動的に再送信され、あるパケットの欠落を防止し、データ全体の破損を招くことを試みた.各パケットにはシーケンス番号があり、B側がすべてのパケットを受信した後、データを再編成できることを保証します.
1.2 IPアドレスとポート
Bにデータを送信するには、まずBコンピュータのアドレスを知っておく必要があります.次に、Bコンピュータには多くのプログラムがある可能性があります.例えば、qq、メール、ブラウザなど、具体的にはどのプログラムに送信しますか.だからポートという概念があって、1つのプログラムは1つのポートに対応して、ポートの値の範囲は一般的に:1024~65535
1.3イントラネットと外部ネット
ある时、私たちは学校、会社で、会社のパソコンでサーバーを建てて、それから外網のクライアントで使用することができます;では、このときサーバーのipアドレス、ポートをどのように設定するか:あるポートをBにマッピングし、Aでルータに接続するこのポートをルータに設定する必要があります.
1.4 DNS
DNSは分散型データベースで、超巨大です.各レコードには、(ドメイン名、ipアドレス);
1.5ブラウザ
ブラウザの主な機能は、アクセスしたいネットワークリソースをブラウザウィンドウに表示するようにサーバに要求することです.ここでは一般的にHTMLドキュメント、画像など他のタイプを指します.リソースの場所は、ユーザーがURL(統合リソース識別子)を使用して指定します.
ブラウザのコアであるレンダリングエンジンは、リクエストの内容を表示します.要求されたコンテンツがHTMLであれば、HTMLとCSSのコンテンツを解析し、解析したコンテンツを画面に表示します.
ワークフロー:
1.URLアドレスを入力するかURLのリンクをクリックする
2.ブラウザはURLアドレスに基づいてDNSを結合し、URLに対応するIPアドレスを解析する
1)ブラウザはTCPのパケットを送信することによって、サーバーに接続を開くように要求する
2)サーバもパケットを送信することでクライアントのブラウザに応答し,ブラウザにデータをサーバに送信できることを伝える.
3)HTTP要求の送信
4.サーバが要求を受けた後、対応する応答内容を返す
5.ブラウザはサーバ側から返された応答内容を解析し、ページを表示する
URLを入力すると、ブラウザはこのURLに対応するIPが何であるかを知り、IPアドレスを知ってこそ、ブラウザが指定したサーバの具体的なIPとポート番号に要求を送信する準備ができます.その後、サーバ側は応答結果をクライアントに送信します.この応答結果はhtmlのドキュメントであり、画像、スクリプト、CSSなどを含まない、つまりページのhtml構造である.
1.6 Webサービス
1.6.1クライアント
pythonのRequestsモジュールを直接使用できます.
1.7 http形式
1.7.1要求フォーマット
最初のローは、リクエストメソッドとバージョンです.
次は、ヘッダ、データ(フォームの内容)が要求されます.
1.7.2応答フォーマット
サーバの応答は次のとおりです.
応答のフォーマットは「ヘッダ情報+空行(r)+データ」です.ここで、第1行は「プロトコルバージョン+ステータスコード+ステータス記述」である.
1.8画像ファイルのアップロード
クライアント:
サービス:
参考文献:
1、http://blog.csdn.net/testcs_dn/article/details/50449106
2、http://www.ruanyifeng.com/blog/2016/08/http.html
マシンAからマシンBに送ると、
データ送信は多くのパケットに分解され、マシンBになると、マシンBが再合成されます.送信中、受信者にパケットを受信していないことを要求し、フィードバック情報が必要であり、フィードバックがなければ、tcpは自動的に再送信され、あるパケットの欠落を防止し、データ全体の破損を招くことを試みた.各パケットにはシーケンス番号があり、B側がすべてのパケットを受信した後、データを再編成できることを保証します.
1.2 IPアドレスとポート
Bにデータを送信するには、まずBコンピュータのアドレスを知っておく必要があります.次に、Bコンピュータには多くのプログラムがある可能性があります.例えば、qq、メール、ブラウザなど、具体的にはどのプログラムに送信しますか.だからポートという概念があって、1つのプログラムは1つのポートに対応して、ポートの値の範囲は一般的に:1024~65535
1.3イントラネットと外部ネット
ある时、私たちは学校、会社で、会社のパソコンでサーバーを建てて、それから外網のクライアントで使用することができます;では、このときサーバーのipアドレス、ポートをどのように設定するか:あるポートをBにマッピングし、Aでルータに接続するこのポートをルータに設定する必要があります.
1.4 DNS
DNSは分散型データベースで、超巨大です.各レコードには、(ドメイン名、ipアドレス);
1.5ブラウザ
ブラウザの主な機能は、アクセスしたいネットワークリソースをブラウザウィンドウに表示するようにサーバに要求することです.ここでは一般的にHTMLドキュメント、画像など他のタイプを指します.リソースの場所は、ユーザーがURL(統合リソース識別子)を使用して指定します.
ブラウザのコアであるレンダリングエンジンは、リクエストの内容を表示します.要求されたコンテンツがHTMLであれば、HTMLとCSSのコンテンツを解析し、解析したコンテンツを画面に表示します.
ワークフロー:
1.URLアドレスを入力するかURLのリンクをクリックする
2.ブラウザはURLアドレスに基づいてDNSを結合し、URLに対応するIPアドレスを解析する
1)ブラウザはTCPのパケットを送信することによって、サーバーに接続を開くように要求する
2)サーバもパケットを送信することでクライアントのブラウザに応答し,ブラウザにデータをサーバに送信できることを伝える.
3)HTTP要求の送信
4.サーバが要求を受けた後、対応する応答内容を返す
5.ブラウザはサーバ側から返された応答内容を解析し、ページを表示する
URLを入力すると、ブラウザはこのURLに対応するIPが何であるかを知り、IPアドレスを知ってこそ、ブラウザが指定したサーバの具体的なIPとポート番号に要求を送信する準備ができます.その後、サーバ側は応答結果をクライアントに送信します.この応答結果はhtmlのドキュメントであり、画像、スクリプト、CSSなどを含まない、つまりページのhtml構造である.
1.6 Webサービス
1.6.1クライアント
pythonのRequestsモジュールを直接使用できます.
r = requests.get('https://github.com/timeline.json')
r = requests.post("http://httpbin.org/post")
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)
1.7 http形式
1.7.1要求フォーマット
GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*
最初のローは、リクエストメソッドとバージョンです.
次は、ヘッダ、データ(フォームの内容)が要求されます.
1.7.2応答フォーマット
サーバの応答は次のとおりです.
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
Hello World
応答のフォーマットは「ヘッダ情報+空行(r)+データ」です.ここで、第1行は「プロトコルバージョン+ステータスコード+ステータス記述」である.
1.8画像ファイルのアップロード
クライアント:
#coding=utf-8
import requests
url = 'http://localhost:8080'
path = u'D: .jpg'
print path
files = {'file': open(path, 'rb')}
r = requests.post(url, files=files)
print r.url,r.text
サービス:
#coding=utf-8
from BaseHTTPServer import BaseHTTPRequestHandler
import cgi
class PostHandler(BaseHTTPRequestHandler):
def do_POST(self):
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type'],
}
)
self.send_response(200)
self.end_headers()
self.wfile.write('Client: %sn ' % str(self.client_address) )
self.wfile.write('User-agent: %sn' % str(self.headers['user-agent']))
self.wfile.write('Path: %sn'%self.path)
self.wfile.write('Form data:n')
for field in form.keys():
field_item = form[field]
filename = field_item.filename
filevalue = field_item.value
filesize = len(filevalue)# ( )
print len(filevalue)
with open(filename.decode('utf-8')+'a','wb') as f:
f.write(filevalue)
return
if __name__=='__main__':
from BaseHTTPServer import HTTPServer
sever = HTTPServer(('localhost',8080),PostHandler)
print 'Starting server, use to stop'
sever.serve_forever()
参考文献:
1、http://blog.csdn.net/testcs_dn/article/details/50449106
2、http://www.ruanyifeng.com/blog/2016/08/http.html