ネットワークプログラミング
並行プログラミング
データベース開発
ウェブフロントエンド
1.ソフトウェア開発フレームワーク:
ソフトウェア開発は、私たちは、クライアントとサーバーのセットを開発しなければなりません。
クライアントとサーバーの役割:
サーバー:24時間サービス
クライアント:あなたはサービスを検索したい場合は、サービスを探し、楽しみます
ソフトウェア開発フレームワークは、二つのタイプに分けられます。
C / Sアーキテクチャ:クライアント(クライアント)Severの(サーバー)
長所:ソフトウェアの使用は安定しており、ネットワークリソースを節約することができます。
短所:ユーザーが同じデバイス上で複数のソフトウェアを使用する場合は、複数のクライアントをダウンロードする必要があります。1. 2、すべての更新ソフトウェア、クライアントはアップデートを再ダウンロードするには従わなければなりません。C / Sアーキテクチャソフトウェア:QQ、コンピュータ、マイクロチャネル携帯端末、栄光の王などのようなpycharm。
B / Sのアーキテクチャ:ブラウザ:ブラウザサーバー:サーバー
長所:、複数のソフトウェアをダウンロードするようにユーザーに要求することなく、クライアントのブラウザなどのソフトウェアのユーザー、ブラウザで直接アクセスするのに必要なソフトウェアの更新バージョンをダウンロードする必要が行動しないように。
短所:ネットワークが不安定な場合、ネットワークリソースの過剰消費は、ソフトウェアの使用は安定していません。
ソフトウェアのB / Sの構造:例えば、ブラウザ(のソフトウェアの一部のドメイン名を入力http://oldboyedu.com/)。
学ぶために後半2
ネットワークプログラミング、並行プログラミング、データベース開発は、ソフトウェアアーキテクチャCのS /を開発することができます。(アンチYoukuのシステム)
遠位HTML、CSS、JS、ウェブ・フレーム(ネットワークプログラミング、並行プログラミング)B / Sソフトウェアアーキテクチャを開発することができ(BBSシステム)
3.ネットワークプログラミング
- ネットワークプログラミングの開発の歴史
すべての高度な技術がリモート介してデータを取得することを望んで、軍から導出され、すべてのWebプログラミング "がありました。
どのように初期のリモート通信:
- コール - 「電話回線
- フラットスクリーン・コンピュータ(PC大きなお尻) - 「ケーブル、有線LAN
- ノートPC - 「有線ネットワークカード、無線LANカード
リモート通信を実現するために持っている必要があります。
1.物理的な接続媒体 - 「NIC
2.インターネットプロトコル
- 人と人とのコミュニケーションのメディア:中国語、英語
- コンピュータのメディア間の通信:「インターネット・プロトコル」
4.インターネットプロトコル
また、7層のネットワークプロトコルとして知られているインターネット・プロトコル、OSI 7層のプロトコルは、OSIは、世界標準の組織です。
OSI 7層のプロトコル:
- アプリケーション層
- プレゼンテーション層
- セッション層
- トランスポート層
- ネットワーク層
- データリンク層
- 物理的な接続層
下から先頭に学ぶ:契約の優先順位を5層の合計を理解する必要性を。
物理接続層
バイナリデータを送信した電気信号に基づいて
データリンク層
バイナリデータに基づく電気信号処理用に設計されたデータリンク層「イーサネットプロトコル」、。
イーサネットプロトコル:
1.良好な電気的データをグループ化する条項。
2.コンピュータに接続されたネットワークケーブルの各層は、「カード」を持っている必要があります。
- 異なるメーカーのネットワークカード
- 各カードには固有の番号の世界で「MAC」アドレス12を持つことになります。
- 6前:ベンダー号
- 6後:シリアル番号
スイッチ:複数のコンピュータが相互に接続できます。
データを送信するために、イーサネットベースのプロトコル:
特定:ブロードキャスト、ユニキャスト
短所:ブロードキャストストームは、LANを介して通信することはできません。
インターネット:ローカルエリアネットワークとの間の通信をしてみましょう。
ネットワーク層
IPアドレス:住所1台のコンピュータ(ローカル・エリア・ネットワーク)を識別します。
IP:ドット十進
最小:0.0.0.0
最大:255.255.255.255
IPV4は、少数の人々がコンピュータを使用し始めたので、IPv4プロトコルのバージョンがあります。
IPV6:IP括弧します。
トランスポート層
TCP / UDPプロトコル、それらはポート作業に基づいています
- ポート番号:1つのソフトウェアは、コンピュータを識別します。
- ポート番号の範囲:0〜65535
注意:1つの、オペレーティングシステム、0-1024は、一般的にデフォルトで使用されているポート; 2試みは、8000の後にポート番号を使用するには...
ソフトウェアの開発に使用されるデフォルトのポート番号:
mysqlの:3306
ジャンゴ:8000
Tomcatの:8080
フラスコ:5000
あなたは、サーバーがクライアントと通信したい場合、それは双方向チャネルで、その結果、接続を確立する必要があります。クライアントがサーバーにメッセージを送信します。もう一つは、メッセージを送信するために、クライアントにサーバです。
アプリケーション層:HTTP、FTP
要約:
IP:一意にコンピュータの位置を識別します。
ポート:確認のため、コンピュータ上のソフトウェアアプリケーションのためのポート。
IP +ポート:世界でコンピュータ上のソフトウェアアプリケーション。
これは、β-TCPプロトコルを動作します。
TCPは、ストリーミングプロトコルであります
スリーウェイハンドシェイクは、4回を振っ:
- スリーウェイハンドシェイクは、接続を構築します:
双方向チャネルを確立し、良好な接続を確立します。
-listen:モニター
-established:接続を確立するための確認要求を
- データを送信します。
書きます
読みます
クライアントがサーバにデータを送信し、メモリに格納されたデータは、サーバが受信を確認する必要があり、データがメモリに解放されます。サーバが確認領収書を返すようにそれ以外の場合は、時間から時間に一回送信されます。
確認応答を返さないサーバーが受信した場合の期間にわたって、または、送信をキャンセルします。そして、メモリ内のデータのリリース。
-TIME-WAIT:待つ - 四は、接続をオフに振りました。
5.socket:
ソケットは何ですか:ソケットがモジュールである、あなたはソケットC / Sアーキテクチャを書くことができます。
なぜ使用ソケット:ソケットソケットは、プロトコル層の良い仕事をカプセル化します。利点:あなたは、開発コストを節約することができます。私たちは実装されているメソッドモジュールを呼び出すことによって、2つのプロセス間の接続と通信を確立します。
使用方法:インポートソケットを
注意:クライアントとサーバーが従わなければならない。最後は送信、同時にもう一方の端の異なる端部をrecvを送信したり、RECV。
1.初期ソケットソケット。
#服务端
import socket
#默认指定TCP协议
#买手机
server=socket.socket()
#插卡
server.bind(
#ip+port
('127.0.0.1',9527)
) #把地址绑定到套接字
#开机,等待接听
server.listen(5) #listen(5) 半连接池,监听链接。
#监听是否有消息
#conn:相当于服务端往客户端挖的管道
conn,addr=server.accept() #接收客户端链接
print(addr)
#听客户端给我说话
data=conn.recv(1024).decode('utf8') #可以接收1024字节数据,接收客户端信息
print(data)
conn.send(b'hello xiao zhu') #向客户端发送信息
#挂电话
conn.close() #关闭客户端套接字
#关机
server.close() #关闭服务器套接字
#关机
server.close()
运行结果:
('127.0.0.1', 54257)
你好,小贱贱
#客户端
import socket
#买手机
client=socket.socket()
#往服务端拨号
#client:相当于客户端往服务端挖的管道
client.connect(('127.0.0.1',9527)) #ip+port:寻找服务端,连接服务器
#客户端向服务端说话
client.send('你好,小贱贱'.encode('utf8'))
data=client.recv(1024) #对话(发送/接收)
print(data)
#关闭连接
client.close() #关闭客户端套接字
运行结果:
b'hello xiao zhu'
2.通信ソケットサイクル
#服务端
import socket
server=socket.socket()
server.bind(
('127.0.0.1',9528)
)
server.listen(5)
conn,addr=server.accept()
print(addr)
while True:
#接收客户端发送过来的消息
data=conn.recv(1024).decode('utf8') #可以接收1024字节数据
print(data)
if data=='q':
break
#让服务端输入发送给客户端的消息
send_msg=input('server-->client: ').encode('utf8')
conn.send(send_msg)
conn.close()
#客户端
import socket
client=socket.socket()
client.connect(
('127.0.0.1',9528)
)
while True:
send_msg=input('client-->server:')
#服务端往客户端发送的数据
client.send(send_msg.encode('utf8'))
if send_msg=='q':
break
#服务端返回的数据
data=client.recv(1024).decode('utf8')
print(data)
client.close()
3.サーバー複数のクライアント
#服务端
import socket
server=socket.socket()
server.bind(
('127.0.0.1',8888)
)
server.listen(5) #半连接池,可以“等待5个用户接受服务”
while True:
#等待客户端连接过来
conn,addr=server.accept()
print(addr)
#循环接收客户端数据
while True:
try:
data=conn.recv(1024).decode('utf8')
print(data)
#mac linux系统bug:b''
if len(data)==0:
continue
if data=='q':
break
conn.send(data.encode('utf8'))
except Exception as e:
print(e)
break
conn.close()
#客户端
import socket
client=socket.socket()
client.connect(
('127.0.0.1',8888)
)
while True:
send_msg=input('client-->server: ')
client.send(send_msg.encode('utf8'))
if send_msg=='q':
break
data=client.recv(1024).decode('utf8')
print(data)
client.close()