Day 19ネットワーク通信

4802 ワード

ソケットサーバ
ソケットはソケットとも呼ばれ、ネットワーク通信を実現する両端がソケットである.サーバ対応ソケットとクライアント対応ソケットに分かれています
pythonはsocket標準ライブラリを提供することでsocketプログラミングをサポートします.socketプログラミングは、サーバとクライアントをプログラムで実現することです.
import socket
# ========        =======

1.サーバー対応ソケットオブジェクトを作成する(スタンドアロンを購入した)
socket(family,type)family:ipタイプAF_を設定するINET(ipv 4)->デフォルトAF_INET 6(ipv 6)type:転送タイプSOCK_の設定STREAM(TCP信頼転送)->デフォルトSOCK_DGRAM(UDP不確実伝送)
server = socket.socket()  #      ipv4            

2.IPとポートをバインドする(電話線を差し込む-電話番号を確定する)
bind()ip:サーバのアドレスポート:異なるポートは、コンピュータ上の異なるサービスを区別するために使用されます.値範囲は065535です.注意01024は有名なポート(特殊なサービスポートをバインドするために使用されます.勝手に使用しないでください)に属します.注意:同じ時間に同じポートは1つのサービスしかバインドできません.
server.bind(('10.7.156.97', 8082))

3.傍受請求(電話料金)
Listen(個数)-->サーバが一度に最大のリクエスト個数を処理できるようにデジタル設定する必要がある
server.listen(512)
print('    ')

4.サービスを常に起動状態にする
while True:

5.クライアントからのリクエストを受信する(電話が鳴って、電話に出る)
accept()に実行すると、プログラムが停止し、クライアントがこのサーバを要求したときに実行されることがわかります.セッションとクライアントのアドレスを返す
    print('=====')
    conversation, addr = server.accept()
    print(addr)

6.サーバがクライアントにデータを送信する(会話)
send(data)-->送信データdata:送信する必要があるデータ、要求はバイナリデータ(bytes)
a.str回転bytes:bytes(文字列、encoding='utf-8)文字列.encode
# message = input('>>>')
# # message_data = bytes(message, encoding='utf-8')
# message_data = message.encode('utf-8')
# conversation.send(message_data)

#       
with open('./files/luffy4.jpg', 'br') as f:
    content = f.read()
    conversation.send(content)
    #     
    conversation.close()

7.クライアントから送信されたメッセージを受信する(電話を聞く)
recv(   ) -->            ,                  。          (   )

bytes      
str(   ,encoding='utf-8')
   .decode(    )

  :recv        ,           ,          

ソケットクライアント
import socket

1.クライアントソケットオブジェクトの作成
client = socket.socket()

2.接続サーバー
connect(  )

client.connect(('10.7.156.97', 8080))

while True:
    # 4.        
    message = input('   :')
    client.send(message.encode('utf-8'))
    if message == '  ':
        break

    # 3.          
    re_data = client.recv(1024)
    print('   :',re_data.decode('utf-8'))
    if re_data.decode('utf-8') == '  ':
        break

ソケットサーバのアップグレード
import socket

1.サーバーソケットの作成
server = socket.socket()

2.バインドアドレス
server.bind(('10.7.156.97', 8080))

3.傍受
server.listen(100)

#             
while True:

4.受信要求
    conversation, addr = server.accept()
    print(addr)
    #     
    while True:
        #     
        message_re = conversation.recv(1024).decode('utf-8')

        print('   (%s): %s' % (addr[0][-2:], message_re))
        if message_re == '  ':
            break

    #     
    message = input('   :')
    conversation.send(message.encode('utf-8'))
    if message == '  ':
        break

画像を受信するクライアント
import socket

client = socket.socket()
client.connect(('10.7.156.97', 8082))

message_re = client.recv(1024)
data = bytes()  #            
while message_re:

    # print(message_re)
    data += message_re  #            
    # print('     ')
    message_re = client.recv(1024)

with open('./new.jpg', 'bw') as f:
    f.write(data)
print('    ')

リクエストリクエスト
pythonにはネットワークリクエストをサポートする標準ライブラリはありませんが、httpリクエストをサポートするサードパーティ製ライブラリが現在存在します.
import requests

requests.get(url,params)-->サービスの応答を返すurl->要求アドレスparams->クライアントがサービスに送信するデータ(辞書){パラメータ名:値}
https://www.apiopen.top/satinApi?type=1&page=1
url = 'https://www.apiopen.top/satinApi'
response = requests.get(url, {'type': 1, 'page': 1})

1.応答ヘッダの取得
print(response.headers)

2.バイナリ形式の応答体を持つ
data_bytes = response.content
print(type(data_bytes))

3.文字列形式の応答体を持つ
data_text = response.text
print(type(data_text), data_text)

4.json形式でpythonデータに対応
data_json = response.json()
print(type(data_json), data_json['code'],)


#        
response =requests.get('http://wimg.spriteapp.cn/profile/large/2018/02/24/5a9044    8611639_mini.jpg')
content = response.content
with open('./aa.jpg', 'wb') as f:
f.write(content)